网页漫画的图像压缩

3
作为这里的许多人一样,我也看了一些网络漫画。 Drowtales 是我最喜欢的,但那不是重点。
有一个想法在我的脑海里挥之不去:网络漫画是手绘的图片。它们不是照片。应该有很多冗余(较少的颜色,更多的扁平着色区域等),因此它们应该可以以相当高的比率轻松压缩,同时仍然保持无损质量。尽管如此,似乎最好的压缩工具仍是老掉牙的有损 JPEG。
为什么?难道就没有更好的发明吗?我不是数据压缩方面的专家,所以我自己微薄的尝试找到一些更好的算法都是徒劳的。我能找到的最好的是Pngcrush,但它在压缩方面仍远远落后于JPEG。
我想听听专家的意见。我的这个想法是愚蠢的,注定失败吗?还是说人们已经找到或者我可以研究的某种方法呢?
当然,这是出于减少加载时间的自私愿望。 :)
添加:有些人似乎没有理解重点,所以我会澄清:
网络漫画图片应该有很多冗余,因此它们应该很容易压缩。有没有可能以某种方式压缩它们,使它们既无损又比JPEG小?或者至少在保持质量的同时比JPEG更好地压缩它们。
由于它们将用于网络,因此专用的压缩器可能仍然会发出PNG或JPEG-只是使用修改后的算法进行更好的结果。

GIF应该能够很好地工作。当然,您必须承诺保持使用的颜色数量相当低。没有渐变填充,也不能在一个或两个面板中悄悄插入实际照片。我不知道为什么你要费心…… - Shog9
这意味着再次降低漫画的质量。这正是我希望避免的。 - Vilx-
那么你需要一个无损压缩算法。GIF、PNG、某种形式的RLE... 当然,这些算法要么会限制要压缩的图像的初始质量,要么无法像JPEG这样的有损算法一样进行大幅度压缩。 - Shog9
也许你需要矢量图像格式,比如SVG?这种格式可以利用绘画的简单性,仅编码笔画和填充区域。 - Shog9
你需要定义“比JPEG小”的概念。当然,如果你将压缩级别调高,你可以制作比PNG格式同一图像更小的JPEG格式图片。但对于许多图像来说,特别是像网络漫画这样简单的图像,JPEG格式看起来远不如PNG格式好。 - Nick Johnson
15个回答

14

毫无疑问,这是外观和性能之间的平衡。除非有针对漫画的定制压缩算法,否则我认为最好的方法是尝试使用JPEG压缩级别,直到您得到一个大小合理,但对于特定漫画看起来仍然很好的压缩。

PNG vs JPEG

来自lbrandy.com


PNG是无损的,正如您的图像所示。使用PNG压缩级别不需要进行任何实验-无论您使用多少压缩,图像看起来都是一样的。 - Blorgbeard
那应该是JPEG格式的。谢谢。 - Bill the Lizard
图片看起来一样,但文件大小可能会有很大的差异。这就是实验的作用所在,也是为什么像pngcrush这样的应用程序对普通用户非常有用的原因。 - Sparr

6
漫画的问题在于使用了许多渐变着色。例如,在计算机上使用Photoshop给漫画上色时,常见的技术是首先用纯色块来进行区域分块,就像你提到的那样。然而,这些实心区域随后会通过各种技术进行完善,例如手动触碰使用喷枪工具、叠加渐变填充、闪避和烧制工具等。
结果是得到一幅更像自然图像的图像——当然,这正是漫画艺术家所追求的——因此它可以更好地使用损耗算法进行压缩,例如JPEG所使用的那种算法。

PNG的各种滤波器方法都能很好地处理各种梯度,特别是Paeth滤波器。 - Sparr

5

完全不同的方法是使用像SVG这样的矢量格式来呈现漫画图像。这将捕捉到绘画的本质(在这里填充,弧线在这里,线条在这里等等),而无需尝试对生成的图像进行栅格压缩。


这将提供最佳压缩,因为作者认为图纸具有有限的组件数量。也许Flash是他所需要的。 - Karl

4
你的假设不符合我的数据。 最喜欢的网络漫画 已经以PNG格式分发。使用默认压缩质量将一个167K的PNG文件转换为JPEG会得到一个199K的JPEG文件。平衡点在-quality 60-quality 65之间,这对于JPEG来说是相当低的质量。所以,Questionable Content已经无损压缩并且比JPEG更小。

正确的,对于压缩PNG文件大小的影响最大的是颜色调色板的选择。 - Greg Hewgill
毫不意外。你会感到震惊,震惊地发现QC使用256种颜色 :-) - Norman Ramsey

2

我在为网络使用处理图片时学到了一些小技巧 -

  • 对于JPEG图像使用jpegtran -optimise命令,它会无损地重新压缩并优化图像,可以将压缩不良的图像大小减少几个百分点。
  • 我会通过pngnq将PNG文件转换成8位图像,然后再通过optipng -i0进行重新压缩并删除任何交错。我知道您不喜欢有损压缩,但是pngnq可以惊人地将图像转换为调色板 - 最好的方法是自己尝试并确定输出是否足够好。

2

在某些情况下,JPEG图像的大小会比PNG图像大。

例如,在图像非常简单的情况下,PNG可能会更好地压缩图像并提供更好的图像质量。

以下是一些Java代码示例:

public static void main(String[] args)
{
    BufferedImage img = new BufferedImage(
            256,
            256,
            BufferedImage.TYPE_INT_RGB
    );

    Graphics g = img.getGraphics();

    g.setColor(Color.white);
    g.fillRect(0, 0, 256, 256);
    g.setColor(Color.black);
    g.drawLine(0, 0, 255, 255);
    g.drawLine(255, 0, 0, 255);

    try
    {
        ImageIO.write(img, "jpg", new File("output.jpg"));
        ImageIO.write(img, "png", new File("output.png"));
    }
    catch (IOException e) {} // Don't usually ignore exceptions!

    g.dispose();
}

以上代码生成了一个尺寸为256 x 256像素的图像,并以“X”的形式绘制了两条相交的对角线。

使用256 x 256的图像是为了将图像大小保持为8的倍数,因为JPEG压缩对图像的8 x 8像素部分执行2D DCT变换。通过保持图像大小和线条位置与8 x 8像素部分对齐,可以减少压缩伪影的数量,并提高图像质量。

(选择256 x 256是经验性的——我最初使用了100 x 100,发现JPEG图像很糟糕,所以我尝试了64 x 64,看起来更好,所以我将其放大以模拟更真实的图像大小。)

绘制完图像后,程序会生成一个JPEG文件和一个PNG文件。(Java ImageIO库使用默认压缩比0.75f作为JPEG的压缩质量。)

结果:

output.png : 1,308 bytes
output.jpg : 3,049 bytes

看这张图片本身,JPEG 有一点伪像,但是直到我使用图像编辑器放大后才变得很明显。当然,PNG 图像是无损的,所以它是原始图像的精确表示。
总之,一个图像是用 PNG 还是 JPEG 更小其实取决于来源,有些情况下 JPEG 可能比 PNG 更大,但 PNG 可能更好质量。当然,在实践中,通常对于给定的图像,PNG 会比 JPEG 更大。

1

您可能希望减少图像中编码的颜色数量。尝试仅使用256种颜色保存漫画,可以显著减小文件大小。根据您的具体绘画风格,这可能已经足够了。


1

我画了许多大型手绘电路图,将其扫描为灰度以用于计算机文档;在可视质量和文件大小方面,LZW压缩的TIFF总是胜过JPEG,我认为这是因为TIFF可以利用RLE编码来处理空白。我不确定PNG是否也可以做到这一点,或者RLE是否可以扩展到多色图像而不仅仅是黑白。

编辑:我刚刚尝试了我的一个灰度手绘图;TIFF可以比PNG节省约2:1的空间(43K vs. 83K,使用ImageMagick转换从原始TIFF -> PNG -> 再次转换为TIFF,以确保ImageMagick生成两种文件格式并确保我的原始程序没有出现问题),但这只是因为TIFF使用8位/像素(灰度),而PNG使用24位/像素(RGB)。

编辑2:没关系,我刚刚能够使用pngcrush -c 0确保图像是灰度的。PNGcrush将RGB版本压缩到67K,将灰度版本压缩到34K。很好!

编辑3:只是一个程序上的注意点:我认为选取一些不同类型的图像作为标准基准会更有意义,然后在基准集上尝试不同的技术,而不是让一群stack-overfloids自以为是。这似乎是一个需要经过充分测试的实证解决方案的问题。

1
一堆基准图像听起来是个绝妙的主意。数据压缩基准测试中的任何图像都适合吗?还是我们需要一个全新的“网络漫画图像”类别? - David Cary

0

对于钢笔式图像,GIF 中的压缩方案可以发挥奇效。

JPEG 压缩不适合这种类型的图像。


0
无论无损压缩有多好,有损压缩总是更好的,因为它只有更少的限制。
想象一下,如果有一天他们发明了一种比JPEG更好的漫画无损压缩技术,显然第二天就会有人修改它以实现更高的压缩率,即使这意味着某些信息会丢失。

是的,但我仍然需要看到至少一种针对绘制图像进行优化的压缩技术(有损或无损)。 - Vilx-
因为“绘制图像”并不属于需要进行优化的特殊类别。在图像压缩中,寻找和压缩大块相同颜色的基本技巧之一。 - sliderhouserules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接