iOS获取图片的Base64String,兼容Android,java,web,jpg(jpeg),png

呃呃呃……需求的来源又是同学,对!又是!

废话不哆嗦,怎么把一张图在iOS上转一个Base64String出来,稍微了解的,或者随便搜一下,都能搞定一大堆,但是!!!!

自己(iOS)转自己用,完全没问题,但是当你需要和安卓、web端一起用的时候,事情就爆炸了,你可能会发现自己转出的Base64String和别人的不一样,你以为人家错了,可是人家转出来的都一样!!!!!

事情完全不怪你,主要是因为UIImage类,这个类会悄悄地对你读进来的图片进行加工,具体干了啥,我也不知道,但是我知道这步加工会导致你出错,所以类似下面的方法都不可以。

1     UIImage * img   = [UIImage imageNamed:@"test.jpg"];
2     NSData * data   = UIImageJPEGRepresentation(img, 1.0f);
3     NSString * str  = [data base64Encoding];
4     //base64Encoding首先是这个方法可能即将被苹果废掉,其次,转出的字符串其他平台搞不定
5     NSString * str2 = [data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
6     //这一次,方法对了,注意Options的参数NSDataBase64Encoding76CharacterLineLength,需要选这一个,不幸的的是,还是没法用,因为data的来源是UIImage。

那么到底该怎么办?,答案很简单,不走UIImage,所以下面这一句可以搞定!

    NSString *Str = [[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test.jpg" ofType:nil]] base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];

拆开是这样的:

1     NSString *path  = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"jpg"];//图片路径
2     NSData * data   = [NSData dataWithContentsOfFile:path];//所以这里你可以换成网络路径,如下
3     NSURL * url     = [NSURL URLWithString:@"your url string"];//url
4     NSData * data2  = [NSData dataWithContentsOfURL:url];
5     NSString * str  = [data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];//str 华丽丽的诞生了

综上所述:data的来源很重要,所以尽可能用路径,但是你的需求非得从UIImage中获取data怎么办?

也有办法,先写入文件,再从文件读取data,这可不是脱裤子放屁--找麻烦,简单解释下:

  Q:为什么UIImage获取的data转出的Base64String不行?

  A:因为UIImage改变了图片的data。

  Q:那么写回文件会还原数据么?

  A:不会!

  Q:那写回去有个P用?!!!

  A:道理很简单,虽然写回去的data和原来的data不同了,但是这时候它是一张标准的图了,而不是一个UIImage对象,再从这里获取data,又是标准的图片的data。所以就可以了。

好了 ,上类!!!下载地址:https://files.cnblogs.com/files/kongkaikai/GetImgBase64String.zip

使用方法简直是太简单了!!!!,不解释!!!

 

1     NSString * str  = [GetImgBase64String getImgBase64StringWithImgFilePath:[[NSBundle mainBundle]pathForResource:@"a" ofType:@"png"]];
2     NSString * str2 = [GetImgBase64String getImgBase64StringWithImg:[UIImage imageNamed:@"test.jpg"]];
3     NSString * str3 = [GetImgBase64String getImgBase64StringWithImg:[UIImage imageNamed:@"test.jpg"] Ratio:0.7];
4   //你要是不引入.h,我保证不打死你!!!!!
5 //至于为什么我不写一个知己ImgName,然后把[[NSBundle mainBundle]pathForResource:@"a" ofType:@"png"]自己搞定一遍是怕你随便找个名字就乱用!!!

 

posted @ 2016-03-14 11:06  孔凡凯凯  阅读(2204)  评论(0编辑  收藏  举报