【问题标题】:Inverse of NSData to UIImage conversion?NSData 到 UIImage 转换的逆?
【发布时间】:2011-09-23 16:06:17
【问题描述】:

在 iPhone 应用程序中,我使用标准 HTTP 请求从服务器加载 JPG 图像。数据以 NSData 的形式返回,我可以使用 [UIImage imageWithData:responseData] 函数将其转换为 UIImage。我的问题是,我可以将图像的 UIImage 表示转换回它源自的相同 NSData 吗?我知道UIImageJPEGRepresentation() 函数,但我尝试了将compressionQuality 设为1,这给了我与原始NSData 不同的东西。

【问题讨论】:

    标签: iphone objective-c uiimage nsdata uiimagejpegrepresentation


    【解决方案1】:

    我认为(实际上是猜测)您的问题可能是因为 UIImage 在内部未以 JPEG 格式存储。由于 JPEG 压缩的工作方式,转换回 JPEG 不太可能为您提供完全相同的数据。你有什么理由不能保留原来的 NSData 吗?

    【讨论】:

    • 我猜这个问题类似于使用 PhotoShop 重复打开和保存 JPG。有损压缩复合,你永远不会有相同的图像。不想保留 NSData 的原因是为了提高 CoreData 的性能(将其存储为 BLOB)。但是,我刚刚遇到developer.apple.com/library/mac/#documentation/cocoa/conceptual/…,它概述了我的问题的解决方案。感谢您的意见。
    【解决方案2】:

    您应该使用 UIImagePNGRepresentation(),并将文件作为 PNG 发送到设备。 PNG 在设备上加载和保存的效率要高得多。这是 standard method 将字节数组 (NSData) 转换为图像或从图像转换。

    如果您被 JPEG 数据卡住,UIImageJPEGRepresentation() 是将其返回到 NSData 对象的正确方法。它可能不完全相同,这取决于 Apple 如何实现该方法,它可以更新一些数据,同时在技术上仍然是相同的图像(将呈现相同的图像)。

    【讨论】:

    • 我同意.. 但不幸的是,我在 Web 服务器上的源是 JPEG,我想将 UIImage 转换回与最初下载的内容相同的 NSData 表示形式。
    • 我相信你是对的,创建的 JPEG 并不相同,但这就是问题所在。我担心复合有损压缩。我认为唯一的解决方案是存储我现在正在做的 NSData。感谢您的回复。
    猜你喜欢
    • 2011-09-22
    • 2010-12-21
    • 2014-09-19
    • 2013-11-29
    • 1970-01-01
    • 2015-11-24
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多