IOS图片转成字符串和字符串转回图片
2016-04-01 14:38
375 查看
IOS图片转base64字符串和字符串转回图片
最近在使用扫描二维码存储的时候遇到了如下问题:我需要将扫描到的图片和照片保存下来,我想到了用轻量级的数组存储NSUserDefaults。但是遇到一个问题就是,NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。其他类型不支持,而且即便是存到数组字典或者Data中也不行。
后来就将图片转换成了字符串然后存model中,再把model存到数组中,数组存到NSUserDefaults中,在记录界面读取。
转换成字符串
字符串转换成image
如果没有base64Encoding,可以手动添加
最近在使用扫描二维码存储的时候遇到了如下问题:我需要将扫描到的图片和照片保存下来,我想到了用轻量级的数组存储NSUserDefaults。但是遇到一个问题就是,NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。其他类型不支持,而且即便是存到数组字典或者Data中也不行。
后来就将图片转换成了字符串然后存model中,再把model存到数组中,数组存到NSUserDefaults中,在记录界面读取。
转换成字符串
UIImage *_originImage = [UIImage imageNamed:@"full_playlist_hl.png"]; NSData *_data = UIImageJPEGRepresentation(_originImage, 1.0f); NSString *_encodedImageStr = [_data base64Encoding]; NSLog(@"===Encoded image:\n%@", _encodedImageStr);
字符串转换成image
NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:_encodedImageStr]; //上边的方法7.0之后弃用了,可以使用下边这个方法 //NSData * a = [[NSData alloc] initWithBase64EncodedString:newDic[@"image"] options:(NSDataBase64DecodingIgnoreUnknownCharacters)]; UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData]; NSLog(@"===Decoded image size: %@", NSStringFromCGSize(_decodedImage.size));
如果没有base64Encoding,可以手动添加
- (NSString *) base64Encoding { return [self base64EncodingWithLineLength:0]; } - (NSString *) base64EncodingWithLineLength:(unsigned int) lineLength { const unsigned char *bytes = [self bytes]; NSMutableString *result = [NSMutableString stringWithCapacity:[self length]]; unsigned long ixtext = 0; unsigned long lentext = [self length]; long ctremaining = 0; unsigned char inbuf[3], outbuf[4]; short i = 0; short charsonline = 0, ctcopy = 0; unsigned long ix = 0; while( YES ) { ctremaining = lentext - ixtext; if( ctremaining <= 0 ) break; for( i = 0; i < 3; i++ ) { ix = ixtext + i; if( ix < lentext ) inbuf[i] = bytes[ix]; else inbuf [i] = 0; } outbuf [0] = (inbuf [0] & 0xFC) >> 2; outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4); outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6); outbuf [3] = inbuf [2] & 0x3F; ctcopy = 4; switch( ctremaining ) { case 1: ctcopy = 2; break; case 2: ctcopy = 3; break; } for( i = 0; i < ctcopy; i++ ) [result appendFormat:@"%c", encodingTable[outbuf[i]]]; for( i = ctcopy; i < 4; i++ ) [result appendFormat:@"%c",'=']; ixtext += 3; charsonline += 4; if( lineLength > 0 ) { if (charsonline >= lineLength) { charsonline = 0; [result appendString:@"\n"]; } } } return result; }
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- C++实现读取图片长度和宽度
- Android实现图片异步加载并缓存到本地
- PHP根据图片色界在不同位置加水印的方法