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。所以就可以了。

好了 ,上類!!!下載地址:http://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"]自己搞定一遍是怕你隨便找個名字就亂用!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM