NSData 到 UIImage 转换的逆过程?
在 iPhone 应用程序中,我使用标准 HTTP 请求从服务器加载 JPG 图像。数据以 NSData 形式返回,我可以使用 [UIImage imageWithData:responseData]
函数将其转换为 UIImage。我的问题是,我可以将图像的 UIImage 表示形式转换回其来源的 NSData 吗?我知道 UIImageJPEGRepresentation() 函数,但我尝试使用压缩质量 1 来实现,这给了我一些与原始 NSData 不同的东西。
In an iPhone app I load a JPG image off a server using a standard HTTP request. The data comes back as NSData, which I can convert into a UIImage using the [UIImage imageWithData:responseData]
function. My question is, can I convert the UIImage representation of my image back to the same NSData that it originated from? I know about the UIImageJPEGRepresentation()
function, but I tried that with a compressionQuality of 1 and that gave me something different than the original NSData.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为(实际上猜测)您的问题可能是因为 UIImage 内部未以 JPEG 格式存储。由于 JPEG 压缩的工作方式,转换回 JPEG 不太可能提供完全相同的数据。有什么理由不能保留原始的 NSData 吗?
I think (guess, actually) your issue is probably because a UIImage is not stored in JPEG format internally. Because of the way JPEG compression works, it is unlikely that the conversion back to JPEG could give you the exact same data. Is there any reason why you can't keep the original NSData hanging around?
您应该使用 UIImagePNGRepresentation(),并将文件作为 PNG 发送到设备。 PNG 在设备上加载和保存的效率要高得多。这是转换图像的标准方法与图像之间的字节数组 (NSData)。
如果您受困于 JPEG 数据,UIImageJPEGRepresentation() 是将其返回到 NSData 对象的正确方法。它可能不完全相同,具体取决于苹果如何实现该方法,它可以更新一些数据,同时技术上仍然是相同的图像(将呈现相同的图像)。
You should use UIImagePNGRepresentation(), and send files as PNGs to the device as well. PNG is much more efficient to load and save on the device. This is the standard method of converting an array of bytes (NSData) to/from an image.
If you're stuck with JPEG data, UIImageJPEGRepresentation() is the correct way to get it back to an NSData object. It might not be identical, depending on how Apple implemented that method it could update some of the data while technically still being the same image (would render the same).