SVG图像看起来比高分辨率的png,jpg或gif更好地按比例缩小吗?


15

我知道,如果您想按比例放大图像,那么SVG是一个明智的选择。

但是,我的情况是我有一些图标,希望用户能够通过CMS上传。SVG的创建有点棘手,因此jpg,gif或png似乎是管理员的理想格式。

如果上传的图片大小等于或大于显示尺寸,并保持正确的比例,那么减小尺寸时jpg,gif或png的质量是否可以和SVG一样高?

我的假设是,浏览器也需要对低于特定大小的svg进行消除别名处理,因此,尽管gif 看上去确实更加模糊,但它们的模糊程度可能与其他任何格式一样。


4
一个很好的问题,但我相信答案是“取决于浏览器”。
usr2564301 '16

Answers:


7

(注意:请先阅读OP的答案,因为我的答案是对OP调查的评论)

这是Android Chrome的已知问题。在某些版本中,他们禁用了抗锯齿功能,从而使矢量形状的边缘变得清晰。这样做的原因是为了减少由抗锯齿计算造成的过载。由于抱怨,他们发布了应启用反混叠的更新。

Stack Overflow中有多个线程讨论此问题。这是其中之一:https :
//stackoverflow.com/questions/19875908/vectors-poorly-displayed-on-chrome-for-android-canvas

我在IPod Touch Safari上找不到相同问题的参考,但是推断并假设问题相同可能是安全的。

有一些方法即使在禁用时也可以尝试强制使用抗锯齿,例如,该技巧基本上会在元素周围添加一些填充,从而由于某种原因导致浏览器应用抗锯齿。您还可以尝试将元素的shape-rendering属性设置为不同于整边的元素,并查看浏览器是否认可它。


添加-webkit-backface-visibility:隐藏意味着iPod上的非svgs会以与svgs完全相同的方式模糊,这回答了我的问题-即在按比例缩小时没有必要选择另一个。奇怪的是,Android修复似乎无法使我的Android Chrome /本机浏览器版本的渲染行为标准化,但这是另一个问题。谢谢你的帮助。
理查德B

13

我刚刚进行了测试,唯一的区别似乎是在移动浏览器上。

我创建了一个990 x 900px的Twitter图标图像(该图标似乎过于详细,无法实现良好的缩放比例,因此对本次测试非常有用)。我将其另存为SVG,JPG,GIF,透明GIF(只是鸟的形状,没有背景色,而是将其添加到CSS中),PNG,透明PNG。

然后,我将这些尺寸缩小到15px,25px,50px,100px和150px。

这是Firefox中的结果: 在此处输入图片说明

这是Chrome中的结果: 在此处输入图片说明

如果我们放大显示最小结果的屏幕抓​​图,以便看到正在生成的像素,则Firefox(顶部)会使非透明版本的边缘稍微变暗,但是所有其他结果都非常相似。

在此处输入图片说明

但是,在iPod Touch Safari浏览器上,SVG版本似乎很模糊,而其他版本则非常像素化:

在此处输入图片说明

在Android Chrome上也可以看到类似的结果。我尚未对此截图。

我想知道这是否与像素密度有关,像素密度是显示器的主要区别,但是如果所有图像在移动设备上而不是仅在SVG上以不同的方式处理,这对我来说更有意义。

如果有人可以解释为什么会这样,那么我将转移接受的答号。否则,我猜测TL; DR的答案在于,这取决于您是否喜欢模糊或像素化的图标(或为响应性断点制作许多像素大小合适的图标)。

编辑:从那以后,我观察到svg通常在苹果设备上更加清晰-twitter鸟可能太详细了,因此无法在上面的测试中显示出来,因此感到它们是用于图标的正确格式。


SVG在显示时进行渲染,并且可以从AA中受益,其他都是固定分辨率,并且他们唯一可以拥有的AA是2倍渲染;模糊; 并减少,这实际上并没有帮助,除非在“去屏幕”情况下。对于SVG,当您只有8px的宽度时,固定的AA方法(如全面使用简单的4x FSAA)将过于激进,而下采样始终会导致某些模糊。
Yorik '16

请注意,缩放和重采样的类型取决于软件实现。大多数选择“快速”或“平衡”而不是质量。
Yorik '16

3

矢量图像和位图图像之间有非常重要的区别。如果我们简化一点,矢量图像是由客户端渲染的,而位图图像是由您渲染的。

这意味着您发送图像的应用程序对它的行为有更多的发言权。最终结果是您有以下缺点

  • 需要更多的资源来使图像呈现
    • 在这种情况下,渲染器可能会选择降低质量,因为它没有足够的资源来更好地改善质量。
  • 每个成像系统都有自己的一套怪癖和缺陷
    • 使保持一致变得更加困难
    • 您遇到了程序员的问题

另一方面,这样做有一些好处

  • 图像可以自由缩放并具有更多操作选项。
    • 这仅仅是客户端完成工作的结果,因此,如果您发送知道如何缩放的元素,则他们可以花更多时间在像素计算上获得更大的图像。
  • 在许多情况下,数据都小于像素图像(尽管不一定如此)

如果系统有错误的渲染器,您将无能为力。您的最终应用程序有一个选择,他们可以使用该选择做出错误的决定。

哪个更好

这取决于您可以渲染图像的程度以及可以使用的带宽量。当然,可以实现比浏览器更好的渲染效果。毫不奇怪,一个人还能比Illustrator做得更好。但随后,您将失去延迟渲染的所有好处。

还有第三种选择。

如果您对结果不满意,可以随时尝试制作自己的渲染引擎。使用支持webgl的平台,您可以。请参阅此处的示例。但这是很硬核的,不会节省您表单实现的详细信息。


2

(尚不足以直接评论Richard B的答案。)

为了回答您的问题,Richard B,我们经常看到这种影响在需要低功耗硬件上进行抗锯齿的元件上。当减少或从那些环境中删除了抗锯齿时,甚至在圆角DOM元素上也会发生这种情况。

在我们的公司中,有些情况下我们使用功率较低的硬件,并开始遇到此“锯齿状边缘”的问题。我们禁用/减少了抗锯齿的数量,以提高性能。这可能与您在移动设备上的测试返回测试结果的原因相同。


有道理是一个原因。但是,可耻的SVG似乎与其他图像类型不一致。
理查德B

1
@RichardB,嗯,它们与常规图像有点不同。实际上,您可以与它们进行交互,就好像它们是DOM节点一样。它们的路径和形状像真实的DOM节点一样接收事件和CSS属性,因此,如果我的理解是正确的,它们将遵循与其他节点相同的渲染路径,并且在这种情况下是有意义的。图像是经过栅格化处理的盒子,并通过不同的渲染通道,有时甚至会在GPU上划出空间。
布拉克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.