在 iPhone 上加载大图像的最快方法是什么?

发布于 2024-08-18 10:33:30 字数 94 浏览 2 评论 0原文

我应该使用 UIImage 还是 CGImage ? PNG 或 JPG ? 我已阅读该文档并尝试了不同的方法,但没有注意到显着的改进。 加载图像可能需要 1 秒,看起来很慢

Should I use UIImage or CGImage ? Png or Jpg ?
I've read the doc and tried different things but did not notice significant improvement.
Loading an image can take 1 good second which seems slow

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

筱武穆 2024-08-25 10:33:30

UIImage 只是 CGImage 的 ObjC 包装器,因此它们是相同的。

来自 SDK 文档:

您应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。除了此类图像会消耗大量内存之外,在使用图像作为纹理时可能会遇到问题在 OpenGL ES 中或将图像绘制到视图或图层时。如果您执行基于代码的操作,例如通过将图像绘制到支持位图的图形上下文来调整大于 1024 x 1024 像素的图像大小,则此大小限制不适用。事实上,您可能需要以这种方式调整图像大小(或将其分成几个较小的图像),以便将其绘制到您的视图之一。

如果您有一个巨大的图像,您可以尝试使用 UIWebView 来减少内存消耗。


加载图像的时间分为两部分:解压缩图像的时间(与选择 JPG 或 PNG 相关)和渲染图像的时间。

为了解压,我建议你分析简单的语句

[UIImage imageWithContentsOfFile:@"/path/to/your/image.jpg"];

UIImage is just an ObjC wrapper of CGImage, so they're the same.

From the SDK doc:

You should avoid creating UIImage objects that are greater than 1024 x 1024 in size. Besides the large amount of memory such an image would consume, you may run into problems when using the image as a texture in OpenGL ES or when drawing the image to a view or layer. This size restriction does not apply if you are performing code-based manipulations, such as resizing an image larger than 1024 x 1024 pixels by drawing it to a bitmap-backed graphics context. In fact, you may need to resize an image in this manner (or break it into several smaller images) in order to draw it to one of your views.

If you have a huge image, you could try to use a UIWebView to reduce memory consumption.


The time to load an image has 2 parts: the time to decompress the image (relevant to choosing JPG or PNG) and the time to render the image.

For decompressing, I'd suggest you profile the simple statement

[UIImage imageWithContentsOfFile:@"/path/to/your/image.jpg"];
水波映月 2024-08-25 10:33:30

iPhone加载 PNG 比 JPG 更快,因为 PNG 在捆绑到应用程序中时进行了优化(尽管不是从远程加载)。

Addison Wesley 的 iPhone Cookbook 中的一个例外:

“Xcode 使用 SDK 附带的 pngcrush 实用程序自动优化您的 PNG 图像。(您可以在 /Developer 的 iPhoneOS 平台文件夹中找到该程序。从命令行运行它: –iphoneswitch 将标准 PNG 文件转换为 iPhone 格式的文件。)因此,请尽可能在 iPhone 应用程序中使用 PNG 图像作为首选图像格式。”

此外,PNG 是一种无损格式< /strong> 和 JPG 是有损的。 Apple 出于这些原因选择了这种格式。

-凯文

It is faster for the iPhone to load PNGs than JPGs because PNGs are optimized when bundled in your application (although, not loaded from remote).

An except from Addison Wesley's iPhone Cookbook:

"Xcode automatically optimizes your PNG images using the pngcrush utility shipped with the SDK. (You'll find the program in the iPhoneOS platform folders in /Developer. Run it from the command line with the –iphoneswitch to convert standard PNG files to iPhone- formatted ones.) For this reason, use PNG images in your iPhone apps where possible as your preferred image format."

Also, PNG is a lossless format, and JPGs are lossy. Apple chose this format for these reasons.

-Kevin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文