简体   繁体   English

Objective-C Base64编码

[英]Objective-c Base64 encoding

NSString *base64String = [UIImagePNGRepresentation(myimage) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

I am trying to convert uiimage to base64 string. 我正在尝试将uiimage转换为base64字符串。 But i think it gives wrong result. 但是我认为它给出了错误的结果。 It gives this string: 它给出了这个字符串:

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAA\\r\\nABxpRE9UAAAAAgAAAAAAAAAMAAAAKAAAAAwAAAAMAAAAnHRoHj4AAABoSURBVEgN\\r\\nYvj//z8DLTFNDQc5fNQCgiHAcJSBxekYA+MmIN5PZbwJZDbDMQam+0D8n0b4PtAC\\r\\nxnU0MhzoaMZ1QAsYhIAWnKOBJUAzGYTAkUQDS8CGo+QDKloCNxzFAhCHCpagGA4y\\r\\nEwAAAP//PscxrwAAAGxJREFU7ZJBCsAgDASX/qB+22cVPPZLafZQsGDM2rOHhZDE\\r\\nGQjCzNCnAaXhuD22GH+D0rNYf+Dv8IdkCA8FHCxIQvhUIEqm8FSQSFK4JAgkElwW\\r\\ncPECTv9VlWHNnhJpSQFFO1uQXiBdiG6r9h9C14aGNgNBwQAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAA \\ r \\ nABxpRE9UAAAAAgAAAAAAAAAMAAAAKAAAAAwAAAAMAAAAnHRoHj4AAABoSURBVEgN \\ r \\ nYvj // z8DLTFNDQc5fNQCgiHAcJSBxekYA + MmIN5PZbwJZDbDMQam + 0D8n0b4PtAC \\ r \\ nxnU0MhzoaMZ1QAsYhIAWnKOBJUAzGYTAkUQDS8CGo + QDKloCNxzFAhCHCpagGA4y \\ r \\ nEwAAAP // PscxrwAAAGxJREFU7ZJBCsAgDASX / QB + 22cVPPZLafZQsGDM2rOHhZDE \\ r \\ nGQjCzNCnAaXhuD22GH + D0rNYf + Dv8IdkCA8FHCxIQvhUIEqm8FSQSFK4JAgkElwW \\ r \\ ncPECTv9VlWHNnhJpSQFFO1uQXiBdiG6r9h9C14aGNgNBwQAAAABJRU5ErkJggg ==

But this is an empty image. 但这是空的图像。 What is wrong? 怎么了?

Change: 更改:

NSString *base64String = [UIImagePNGRepresentation(myimage) base64EncodedStringWithOptions:NSDataBase64DecodingIgnoreUnknownCharacters];

To: 至:

NSString *base64String = [UIImagePNGRepresentation(myimage) base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

types of encoding: 编码类型:

   NSDataBase64Encoding64CharacterLineLength     
   NSDataBase64Encoding76CharacterLineLength     
   NSDataBase64EncodingEndLineWithCarriageReturn     
   NSDataBase64EncodingEndLineWithLineFeed

types of decoding: 解码类型:

NSDataBase64DecodingIgnoreUnknownCharacters

you are using type of decoding while encoding image 您在编码图像时使用的是解码类型

In the post data your base64 "+" character was translate to " " character. 在发布数据中,您的base64“ +”字符已转换为“”字符。

So you have got the invalid base64 string. 因此,您获得了无效的base64字符串。

UIImage *img = [UIImage imageNamed:@"white.jpeg"];
NSData *imageData = UIImagePNGRepresentation(img);
NSString *imageString = [imageData base64EncodedStringWithOptions:0]; // type one

NSString *imageString = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
//type two 
NSString *str = [imageString stringByReplacingOccurrencesOfString:@"+" withString:@" "];

Hope this will help you. 希望这会帮助你。 Any one type to achieve the encode string 任何一种实现编码字符串的类型

Generally when we convert image into Base64 Encoding,we need to convert Decoding the image.You encoded the image only.After that you must convert into decoded format. 通常,当我们将图像转换为Base64编码时,我们需要转换“解码图像”。仅对图像进行编码。此后,必须转换为解码格式。

Encoding 编码方式

UIImage *imageEncode = [UIImage imageNamed:@"yourImage.png"];  // or yourImage.jpeg
NSData *dataImageEncode = UIImageJPEGRepresentation(imageEncode, 1.0);
           //OR
NSData *dataImage = UIImagePNGRepresentation(image);
NSString *strEncodedBase64 = [dataImageEncode base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

Decoding 解码

NSData *dataImageDecode = [[NSData alloc]initWithBase64EncodedString:strEncodedBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *imageDecode  = [UIImage imageWithData:dataImageDecode];

I have made one method in which you just need to pass uiimage and it will return a base64 string. 我提出了一种方法,您只需要传递uiimage即可返回base64字符串。

    - (NSString *)encodeToBase64String:(UIImage *)image {
    return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM