UIimage 到 NSData 返回 Null

Posted

技术标签:

【中文标题】UIimage 到 NSData 返回 Null【英文标题】:UIimage to NSData returns Null 【发布时间】:2016-01-26 01:45:19 【问题描述】:

我创建了一个二维码图像并将其显示在 UIImageView 中

NSString *QRMessage = @"MESSAGE";

NSData *data = [QRMessage dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setValue:data forKey:@"inputMessage"];
[filter setValue:@"Q" forKey:@"inputCorrectionLevel"];

imageQRCode = filter.outputImage; // imageQRCode is CIImage
ivQR.image = [UIImage imageWithCIImage: imageQRCode]; // ivQR is UIImageView

我正在尝试保存图像,以便用户可以通过某种方式将 QR 码发送给其他人。我第一次尝试像这样将它保存到“剪贴板”......

UIPasteboard *pasteBoard = [UIPasteboard pasteboardWithName:UIPasteboardNameGeneral create:NO];
[pasteBoard setPersistent:true];
[pasteBoard setImage:ivQR.image];

...但剪贴板中似乎没有保存任何内容。

然后我尝试将 UIImage 转换为 NSData 并将其添加为附件,如下所示:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
UIImage *imageToSend = [UIImage imageWithCIImage:imageQRCode];
NSData *data = UIImageJPEGRepresentation(imageToSend,1);
[picker addAttachmentData:data  mimeType:@"image/jpeg" fileName:@"QR.jpg"];

但似乎又没有附加任何东西。

我做了一些测试,看来我从“UIImageJPEGRepresentation()”返回的 NSData 给了我“Null”数据。该图像实际上确实显示在我的手机上,所以我想知道我是否只是将数据转换错误?

我的大部分“谷歌搜索”都告诉我,我转换的方式是正确的。但大多数示例使用用户手机上的图片,或添加到应用程序本身的图片。我的图片是“创建的”...那有什么不同吗?

我的目标是允许用户复制到剪贴板,或添加为 QR 图像的附件。非常感谢任何帮助。

【问题讨论】:

imageToSend 是有效图像吗?我遇到了imageWithCIImage 的问题,发现我必须使用CIContext 和方法createCGImage 创建CGImage,然后从中创建UIImage Rob,非常感谢您的回复。你是对的,我猜 imageWithCIImage 有问题。所以我创建了一个 CGImage,然后将其转换为 UIImage。像魅力一样工作=D 【参考方案1】:

CIImage 转换为UIImage 时,我发现imageWithCIImage 通常不起作用。我一般使用CIContext方法createCGImage,然后从中创建UIImage

CIImage *ciImage     = ...
CIContext *context   = [CIContext contextWithOptions:nil];
CGImageRef cgImage   = [context createCGImage:ciImage fromRect:rect];
UIImage *image       = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

查看Core Image Programming Guide中的示例。

【讨论】:

以上是关于UIimage 到 NSData 返回 Null的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 可以轻松返回 UIImage,但我如何返回 NSData?

如何处理 NSData 并返回 UIImage (Swift)

NSData/UIImage 到字符串

NSData到UIImage

从 NSData 转换到 UIImage 很慢,阻塞 UITableView

将UIImage转换为NSData并在Swift中转换回UIImage?