【问题标题】:Decode Base-64 encoded PNG in an NSString在 NSString 中解码 Base-64 编码的 PNG
【发布时间】:2017-06-14 05:23:51
【问题描述】:

我有一些 NSData 是 Base-64 编码的,我想对其进行解码,我看到了一个看起来像这样的示例

NSData* myPNGData = [xmlString dataUsingEncoding:NSUTF8StringEncoding];

[Base64 initialize];
NSData *data = [Base64 decode:img];
cell.image.image = [UIImage imageWithData:myPNGData];

但是,这给了我很多错误,我想知道该怎么做才能使它正常工作。我需要将某种类型的文件导入到我的项目中还是必须包含框架?

这些是我得到的错误

Use of undeclared identifier 'Base64'
Use of undeclared identifier 'Base64'
Use of undeclared identifier 'cell'

我到处找,不知道什么是正确的做法。

【问题讨论】:

  • 看看stackoverflow.com/a/9847497/724514 - 显示了一种不太明显的base64解码方法。
  • 您现在应该知道,如果您询问有关代码错误的问题,您需要告诉我们错误以获得有用的帮助。
  • @bobnoble 我试过了,但我似乎无法让它工作。
  • @HurkNburkS - 使用上面评论中引用的方法添加了答案。

标签: ios cocoa-touch base64 nsdata


【解决方案1】:

您可以将 Base64 编码的字符串解码为NSData

-(NSData *)dataFromBase64EncodedString:(NSString *)string{
    if (string.length > 0) {

        //the iPhone has base 64 decoding built in but not obviously. The trick is to
        //create a data url that's base 64 encoded and ask an NSData to load it.
        NSString *data64URLString = [NSString stringWithFormat:@"data:;base64,%@", string];
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:data64URLString]];
        return data;
    }
    return nil;
}

使用上述方法从Base64字符串中获取图像的示例:

-(void)imageFromBase64EncodedString{

    NSString *string = @"";  // replace with encocded string
    NSData *imageData = [self dataFromBase64EncodedString:string];
    UIImage *myImage = [UIImage imageWithData:imageData];

    // do something with image
}

【讨论】:

  • 快速提问如何将 myImage 放入 UIWebView?
  • 您可以使用UIImagePNGRepresentation 保存生成的图像,并使用writeToFile:atomically:(或类似方法)保存生成的NSData 对象。实例化一个引用图像的NSURLRequest 对象,并使用UIImageView 方法loadRequest:。快速回答(-;
  • 为我工作。谢谢
【解决方案2】:

NSData Base64 library files 会帮助你。

#import "NSData+Base64.h"

//Data from your string is decoded & converted to UIImage
UIImage *image = [UIImage imageWithData:[NSData
dataFromBase64String:strData]];

希望对你有帮助

Swift 3 版本

几乎一样

//Create your NSData object
let data = NSData(base64Encoded: "yourStringData", options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)

//And then just create a new image based on the data object
let image = UIImage(data: data as! Data)

Swift 2.3 版本

//Create your NSData object
let data = NSData(base64EncodedString: "yourStringData", options: .IgnoreUnknownCharacters)

//And then just create a new image based on the data object
let image = UIImage(data: data!)

【讨论】:

  • 太棒了,现在就去试试 :)
  • 当我尝试使用 NSData*data .. 等时出现错误,它表示 No known class method for selector 'dataWithBase64EncodedString:'
  • 我想我几乎拥有它.. 一个问题我如何将这个 UIImage *image = [UIImage imageWithData:data]; 放入 UIWebView?
  • 这并没有真正起作用,但它是对我帮助最大的帖子:) 我不得不使用这段代码 ** NSData data = [[NSData alloc] initWithData:[NSData dataFromBase64String:xmlString ]];* 并显示 [lay on webview [myWebView loadData:data MIMEType:@"image/png" textEncodingName:nil baseURL:nil];
  • iOS7 为此提供了新方法 - (id)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options 和 - (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options
【解决方案3】:
//retrieve your string 

NSString *string64 = //... some string base 64 encoded

//convert your string to data

NSData *data = [[NSData alloc] initWithBase64EncodedString:string64 options:NSDataBase64DecodingIgnoreUnknownCharacters];

//initiate image from data

UIImage *captcha_image = [[UIImage alloc] initWithData:data];

【讨论】:

    【解决方案4】:
     NSString *base64String=@"............";
        NSData* data = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
                UIImage* img = [UIImage imageWithData:data];
    
    //imageview  is the refrence outlet of image view
                self.imageview.image=img;
    

    【讨论】:

      【解决方案5】:

      这适用于 ios7 及更高版本。

      - (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
        NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
        return [UIImage imageWithData:data];
      }
      

      并使用如下代码:

      UIImage *img = [self decodeBase64ToImage:<ur base64 string>];
      

      【讨论】:

      • 请考虑在您的答案中添加更多细节。
      【解决方案6】:

      Swift 3 版本

      使用数据类型而不是 NSData

      let data = Data(base64Encoded: imageBase64String, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
      let image = UIImage(data:data!)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多