0
点赞
收藏
分享

微信扫一扫

iOS小技能:base64字符串和图片的互转

JamFF 2022-10-05 阅读 221

前言

背景: ​​initQRCodeForInputByteSize cannot find proper rs block info (input data too big?)​

之前的同事 误认为二维码是app侧自己生成,直接将base64字符串作为二维码的内容去生成,一张二维码容不下这么长的内容。就生成失败了。其实只要直接将base64字符串转图片。

案例:iOS富文本编辑器(基于WKWebview实现,Editor使用WKWebview加载一个本地editor.html文件)

base64字符串和图片进行互转

1.1 将base64字符串转为图片

/**
将base64字符串转为图片

*/
+ (UIImage *)stringToImage:(NSString *)str {

NSData * imageData =[[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];

UIImage *photo = [UIImage imageWithData:imageData ];

return

  • 生成一张普通的二维码

+ (UIImage *)generateWithDefaultQRCodeData:(NSString *)data imageViewWidth:(CGFloat)imageViewWidth {
// 1、创建滤镜对象
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

// 恢复滤镜的默认属性
[filter setDefaults];

// 2、设置数据
NSString *info = data;
// 将字符串转换成
NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];

// 通过KVC设置滤镜inputMessage数据
[filter setValue:infoData forKeyPath:@"inputMessage"];

// 3、获得滤镜输出的图像
CIImage *outputImage = [filter outputImage];

return [self

1.2 UIImage转base64

NSData *scaledImageData = UIImageJPEGRepresentation(scaledImage, 0.8);

//Encode the image data as a base64 string
NSString *imageBase64String = [scaledImageData base64EncodedStringWithOptions:0];

iOS小技能:base64字符串和图片的互转_iOS

案例:iOS富文本编辑器(基于WKWebview实现,Editor使用WKWebview加载一个本地editor.html文件) 

II 解决图片压缩的模糊问题

压缩原理:找出那些重复出现的字符串,然后用更短的符号代替,达到缩短字符串的目的。

比如,一篇文章大量使用"#公众号::iOS逆向"这个词语,我们用"iOS"代替,就缩短了6个字符,如果用"i"代替,就缩短了8个字符。

事实上,只要保证对应关系,可以用任意字符代替那些重复出现的字符串。

本质上,所谓"压缩"就是找出文件内容的概率分布,将那些出现概率高的部分代替成更短的形式。

所以,内容越是重复的文件,就可以压缩地越小。

比如,“ABABABABABABAB"可以压缩成"7AB”。

————————————————

iOS小技能:base64字符串和图片的互转_ios_02


see also

公众号:iOS逆向

举报

相关推荐

0 条评论