应用程序尺寸太大,因为图像太多
Posted
技术标签:
【中文标题】应用程序尺寸太大,因为图像太多【英文标题】:App size is too big because of too many images 【发布时间】:2013-07-15 05:21:40 【问题描述】:我正在创建一个通用应用程序。对于一个屏幕,我使用this 控件在网格中显示6 个图像(png 格式)。此屏幕还支持纵向和横向。
我为所有 iDevices 创建了一组不同分辨率的图像,并使用正确的命名约定为它们命名,如下所示。
名字~iphone.png name@2x~iphone.png name~ipad.png name@2x~ipad.png name-568h@2x~iphone.png (iPhone 5)而且我必须创建另一组这些图像,因为我支持两种方向,并且我不能使用与上面相同的图像,因为在横向它会拉伸。
现在我在一个屏幕上就有近 60 张图片,而且应用程序的重量已经达到了 ~40MB!不言而喻,这是不可接受的。
我的问题是,是否有必要为所有这些尺寸/设备和方向创建单独的图像?我不能只为视网膜显示器创建一个集合吗?它会按比例缩小以用于正常显示器吗?如果这不可能,有没有办法缩小图像的大小?
谢谢。
【问题讨论】:
面临同样的问题... 试试tinypng.org 来减小PNG图像的大小。 @Amar 谢谢。到目前为止,我一直将缩小图像作为我的第二个选择。因为创建这么多图像是一项乏味的任务。因此,如果有办法减少这种情况,我会很棒。如果没有,我将不得不退回到压缩方法。 :) @Amar 我使用了你提到的网站。太奇妙了!有 160MB 到 40MB!那是一吨! :) @Isuru 是的,我知道,它非常棒。 【参考方案1】:无需为非视网膜和视网膜显示器创建图像。您只能使用“视网膜图像”(如果可能,使用 JPG 格式)。当您需要显示较小尺寸的图像时,您可以使用“宽高比”来缩小较大的图像。可能会有一些质量权衡。
同样,对于 iPhone 5 图像,您可以使用 clipsToBounds 属性剪裁较长的图像,以在较小的屏幕中剪掉不需要的部分。
【讨论】:
【参考方案2】:不是强制性的,但您应该这样做或至少平衡其他因素。如果不这样做,主要问题与内存 (RAM) 问题有关,较大的图像会占用大量内存空间,而分辨率较低的设备的内存比视网膜设备少。所以缩小并不是最好的选择。 一种可能的解决方案是拍摄一个“大”图像,该图像也可以为其他图像调整大小。为此,您需要使用 Core Graphics 或 ImageIO 重绘图像,这个库可能很有用NYXImagesKit。当然要付出代价:
-
需要计算时间
源“大图像”应至少打开一次以进行计算,如果您已经内存不足,则可能会出现问题
GUI(不仅仅是)元素还有另一种解决方案,使用 PDF vect 图像。你可以找到一篇有趣的文章here by Matt Gemmel 如果您的图像未使用 alpha 通道,请使用 jpg!!!!
【讨论】:
嗨,安德里亚,感谢您的回答。只是为了测试它,我只是使用了一组我为视网膜显示器创建的图像,并在视网膜和普通显示器上运行它。在正常屏幕中,它使用视网膜图像,我没有看到任何问题或变化。很难检测到 iPhone 模拟器的差异吗?我必须在实际设备上进行测试吗? 嗯,没有显着的变化,如果您为每种分辨率提供一种图像而不重新绘制它们,图像就会被简单地拉伸。由于模拟器具有与您的 mac 相同的硬件,因此您也不会注意到内存问题。问题可能发生在真实设备上运行,在 iphone 3g 或 3gs 上加载视网膜图像很快就会填满 RAM,在某些情况下可能会导致崩溃 我明白了。感谢您提供所有信息。 :)以上是关于应用程序尺寸太大,因为图像太多的主要内容,如果未能解决你的问题,请参考以下文章