携手创造,共同生长!这是我参与「日新方案 8 月更文应战」的第26天,点击查看活动概况

前言

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

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

案例:iOS富文本编辑器(根据WKWebview完成,Editor使用WKWebview加载一个本地editor.html文件) download.csdn.net/download/u0…

base64字符串和图片进行互转

1.1 将base64字符串转为图片

/**
 将base64字符串转为图片
 */
+ (UIImage *)stringToImage:(NSString *)str {
NSData * imageData =[[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *photo = [UIImage imageWithData:imageData ];
return photo;
}
  • 生成一张一般的二维码
+ (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 createNonInterpolatedUIImageFormCIImage:outputImage withSize:imageViewWidth];
}

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富文本编辑器(根据WKWebview完成,Editor使用WKWebview加载一个本地editor.html文件) download.csdn.net/download/u0…

II 处理图片紧缩的含糊问题

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

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

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

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

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

比方,“ABABABABABABAB”可以紧缩成”7AB”。

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

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

版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵从CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

blog.csdn.net/z929118967/…

see also

大众号:iOS逆向