【问题标题】:Objective-c Base64 encodingObjective-c Base64 编码
【发布时间】:2016-06-27 10:47:46
【问题描述】:
NSString *base64String = [UIImagePNGRepresentation(myimage) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

我正在尝试将 uiimage 转换为 base64 字符串。但我认为它给出了错误的结果。它给出了这个字符串:

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

但这是一个空图像。怎么了?

【问题讨论】:

  • 你能检查一下你的版本并检查一下它会对你有帮助吗stackoverflow.com/questions/11251340/…
  • 我的也是这样。
  • 你用的是什么版本
  • 我用的是ios8版本
  • 为什么要转换图像 base64 字符串?仅用于将图像上传到服务器吗?解释你的流程你想要达到的目标

标签: objective-c base64


【解决方案1】:

变化:

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

收件人:

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

编码类型:

   NSDataBase64Encoding64CharacterLineLength     
   NSDataBase64Encoding76CharacterLineLength     
   NSDataBase64EncodingEndLineWithCarriageReturn     
   NSDataBase64EncodingEndLineWithLineFeed

解码类型:

NSDataBase64DecodingIgnoreUnknownCharacters

您在编码图像时使用的解码类型

【讨论】:

  • 请解释为什么这可以解决问题。
  • 我尝试了所有的编码类型,但没有成功。它给出了相同的结果。
【解决方案2】:

在发布数据中,您的 base64“+”字符被转换为“”字符。

所以你得到了无效的 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:@" "];

希望这会对您有所帮助。任意一种类型来实现编码字符串

【讨论】:

    【解决方案3】:

    一般我们在将图片转成Base64编码时,需要对图片进行解码,你只对图片进行了编码,之后必须转换成解码格式。

    编码

    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];
    

    解码

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

    【讨论】:

      【解决方案4】:

      我已经做了一个方法,你只需要传递 uiimage,它就会返回一个 base64 字符串。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        相关资源
        最近更新 更多