【问题标题】:Converting image to NSData & back is nil将图像转换为 NSData 并返回为零
【发布时间】:2015-10-11 10:00:01
【问题描述】:

当我这样做时

UIImage *photo = [UIImage imageNamed:@"sample_thumbnail.png"];
self.thumbnail.image = photo;

我看到缩略图是PNG,很好。当我通过以下方式转换为 NSData 并返回时:

UIImage *photo = [UIImage imageNamed:@"sample_thumbnail.png"];
NSData *data = UIImagePNGRepresentation(photo);
self.photoData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
self.thumbnail.image = [UIImage imageWithData:[self.photoData dataUsingEncoding:NSUTF8StringEncoding]];

self.photoData 为零。

为什么会这样?

【问题讨论】:

  • 1) 您无法将图像数据转换为这样的字符串。 2)您不能将 NSString 值分配给期望 UIImage 的属性。
  • @rmaddy 1:) 为什么不呢? #2 是一个错字。
  • 因为数据代表图像数据,而不是 UTF-8 编码的字符串。你需要做一些 base 64 编码。
  • @quantumpotato 1.) 对于NSData 的实例,每个位组合都是有效的。对于 UTF-8 字符串,情况并非如此。除此之外,UTF-8 字符串可以被规范化,改变二进制数据。

标签: objective-c cocoa-touch uiimageview uiimage nsdata


【解决方案1】:

我认为问题在于您从 NSData 实例创建图像的方式。试试这个吧:

UIImage *photo = [UIImage imageNamed:@"sample_thumbnail.png"];
NSData *data = UIImagePNGRepresentation(photo);
UIImage *image = [UIImage imageWithData:data];

__UPDATE__

以下是this post的摘录

- (NSString *)imageToNSString:(UIImage *)image
{
    NSData *imageData = UIImagePNGRepresentation(image);

    return [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}

- (UIImage *)stringToUIImage:(NSString *)string
{
    NSData *data = [[NSData alloc]initWithBase64EncodedString:string
                                                  options:NSDataBase64DecodingIgnoreUnknownCharacters];

    return [UIImage imageWithData:data];
}

【讨论】:

  • 我需要模拟转换为字符串,因为我将从服务器接收 JSON 格式的图像的 PNG 表示。
  • @quantumpotato 我敢打赌你已经看过this post 但以防万一你没有。 =]
  • 我只是在那里测试base64编码的......同样的问题。我正在审核。
  • 你试过了吗?试用需要2分钟。 =]我把我认为你应该试一试的部分放在我的回答中。我希望它对你有用。
  • 嘿,成功了!我没有decodeIgnore 部分……你知道为什么需要这个选项吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2020-09-18
  • 2013-11-29
相关资源
最近更新 更多