iOS - 基于设备的不同图像或缩放相同的图像?

时间:2015-02-26 00:52:20

标签: ios iphone image sprite-kit

开发人员似乎总是为不同的设备创建不同的图像资源,并根据设备加载它们。但是,为最大分辨率设备(iPad)创建图像,然后为iPhone 6,5等缩小图像是否有任何缺点?

我使用SpriteKit,所以我只创建不同大小的SKSpriteNodes并对它们应用相同的纹理并缩放它以适合节点。

我知道可以考虑性能(为旧设备加载大图像)。但除此之外,还有什么吗?这些图像会出现更像素化/模糊的情况吗?

5 个答案:

答案 0 :(得分:3)

完美/纯粹的答案是为每个设备分辨率使用单独的图像和代码。

然而,从您自己的时间和理智的角度来看,使用有限的设置是有意义的,因为分辨率和屏幕尺寸的数量不会很快减少。那么为什么浪费时间准备多个图像,除非xcode这样做更简单。

对于方形或固定宽高比的图像,我认为您只需要一张图像。对于像背景这样的图像存在问题,无论分辨率如何,至少需要满足不同方面的分辨率:所以单独的宽高比图像是必不可少的(如3:2和16:9),除非你不介意压扁,拉伸或裁剪图像。

如果您发现测试中的性能受损,您可以随时添加较低分辨率的图像。

就像素化而言,这是你无法避免的。如果您考虑从x3到x1分辨率时发生的情况,则必须将3x3像素混合到1x1中。在高分辨率下,任何单个像素宽(如线)或在几个像素上具有快速颜色变化的东西都将受到最大影响。你可以在网上看到很多关于此的文章。

避免像素化的唯一方法是使用矢量图像,但这需要特殊的软件来加载矢量图像并将它们渲染成UIImages。

缩小时,每张图片都会受到不同的影响。一个想法可能是为x2图像,你缩小1为iPhone 3和从1到x3为iPhone 6+。这将以原始分辨率覆盖大多数当前设备,并且可能提供不太明显的像素化。

答案 1 :(得分:2)

这取决于。如果截断图像会产生问题,使用一个图像(或每个纵横比一个图像)当然更经济。

对于像照片这样的图像,这可能是完全可以接受的,因为这种图像往往不包含像素完美的特征。

如果我们处理的是图形艺术品 - 细线,锐利的轮廓,像素完美的特征 - 缩放可能会严重损害质量。

请考虑以下示例:想象一下,您想创建一个固定大小的自定义文本字段。文本区域由黑色轮廓包围,线宽为1px。你正在为你的艺术作品使用视网膜分辨率,你的起点是4英寸的屏幕大小。如果文本字段与屏幕一起缩放,盒子将如何显示在其他屏幕尺寸上?它将如何在非屏幕上显示-retina显示?

非视网膜:决议需要减半。想象一下你的艺术作品中有一块2x2像素 - 它需要计算成一个像素。我们的轮廓宽度只有1像素,所以一个2x2像素的块,其中一条线穿过它包含两个黑色像素和两个白色像素。得到的非视网膜像素将是灰色的。实际上,缩放比较复杂,但结果将是模糊,黑色和稍粗的线条。

Scaled Retina:需要提高分辨率。设想一个分辨率为4英寸4英寸屏幕的设备.1px线需要变成1.5像素宽,显然不会起作用。相反,原来的1px线将被拉伸到灰度级两个(或更多)像素,近似于1.5px线所具有的“黑度”。

任何一种方式(向上或向下)缩放都会使轮廓模糊,变粗,变黑。

这个例子不是一个完美的例子,因为iOS允许定义具有可伸缩部分的图像,这些部分可以完美地缩放。对于我们的矩形盒子,这实际上是可能的。但它不适用于更复杂的艺术作品。

如果像素完美是必须的,那么每个分辨率或矢量图形无法绕过图像(Quartz / SVGKit / ...)

编辑:我使用双线性缩放在Photoshop中复制了我的示例。它可能在设备上看起来略有不同,因为它可能使用另一种缩放算法。但我认为你会明白这一点......

Example of image scaling to 0.5x and 1.5x resolution

答案 2 :(得分:1)

我已经有一段时间的印象,你稍后会扩展的单个图像也很好。

对于多种方式,以及一些基准,请查看NSHispter: Image Resizing Techniques

有关进一步阅读,请查看Core Image Apple文档,NSHipster文章也提到了该文档。

答案 3 :(得分:0)

没有人真正回答图像质量是否会降低。我只是尝试实现这一点,并且图像DO看起来比它们保持原始大小的像素更像。

答案 4 :(得分:0)

我可以从内存使用方面的经验回答。足够的人已经回答了图像质量,所以唯一的另一个问题是内存使用问题。我已经使用了你在我的游戏Piston Flip中描述的技术,它工作正常,因为我没有使用许多纹理或节点。但是,在我正在使用的另一个使用磁贴的游戏中,我无法使用大图像并将其缩小,因为每个设备几乎只能处理加载为其屏幕大小指定的磁贴。 / p>

所以它真的取决于。