3

可能这里有很多人,我读了一些网络漫画。Drowtales是我最喜欢的,但这不是重点。

很长一段时间以来,一个想法一直萦绕在我的脑海中:网络漫画是画出来的。它们不是照片。应该有很多冗余(更少的颜色,更平坦的颜色区域等),因此它们应该很容易以相当高的速率压缩,同时仍然保持无损质量。似乎压缩它们的最佳工具仍然是相同的旧有损 JPEG。

怎么会这样?没有更好的东西被发明出来吗?我不是数据压缩方面的专家,所以我自己寻找更好算法的微薄尝试都没有结果。我能找到的最好的是Pngcrush,但它在压缩方面仍然落后于 JPEG。

我想听听专家对此的意见。我的这个想法是愚蠢的,注定要失败吗?或者是否有一些人们已经找到或我可以研究的方法?

当然,这来自于减少加载时间的自私愿望。:)

补充:有些人似乎没有抓住重点,所以我会澄清一下:

网络漫画图像应该有很多冗余,所以它们应该很容易压缩。是否不可能以某种方式压缩它们以使它们既无损又小于JPEG?或者至少比 JPEG 更好地压缩它们,同时仍然保持质量。

由于它们将用于网络,因此专用压缩器仍可能会发出 PNG 或 JPEG - 只需使用修改后的算法进行压缩以获得更好的结果。

4

15 回答 15

14

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

PNG与JPEG

来自lbrandy.com

于 2009-01-08T02:15:58.357 回答
6

漫画的问题是使用了很多渐变色。例如,使用 Photoshop 在计算机上为漫画上色时的一种常用技术是首先将您提到的纯色区域屏蔽掉。然而,这些实体区域随后会使用各种技术进行细化,从使用喷枪工具进行手触摸到叠加渐变填充、闪避和燃烧工具等。

结果是一个更像自然图像的图像 - 这当然是漫画艺术家正在努力的目标 - 因此它使用有损算法(例如 JPEG 使用的算法)可以更好地压缩。

于 2009-01-08T01:40:49.830 回答
5

一种完全不同的方法是使用像 SVG 这样的矢量格式来渲染漫画图像。这将捕获绘图的本质(在此处填充、此处为弧线、此处为线条等),而无需尝试对生成的图像进行光栅压缩。

于 2009-01-08T02:02:11.970 回答
4

你的假设没有得到我的数据的证实。最喜欢的网络漫画已经以 PNG 格式分发。使用默认压缩质量将 167K PNG 文件转换为 JPEG 会生成 199K JPEG 文件。收支平衡介于-quality 60和之间-quality 65,这对于 JPEG 来说是相当低的质量。因此,可疑内容已经被无损压缩并且比 JPEG 更小。

于 2009-01-08T02:21:30.823 回答
2

我在为网络使用图像时学到了一些东西-

  • 在 JPEG 上使用jpegtran -optimise- 它会无损地重新压缩它们,并且可以将压缩不良的图像减少几个百分点。
  • 我运行PNG文件pngnq(使它们成为8位),然后optipng -i0(重新压缩并删除任何隔行扫描)。我知道你说过你不喜欢有损,但是 pngnq 在将图像转换为调色板方面做得非常好——最好的办法是自己尝试一下,看看输出是否足够好。
于 2009-01-08T02:04:44.523 回答
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 大。

于 2009-01-08T02:26:51.517 回答
1

您可能希望减少在图像中编码的颜色数量。尝试仅使用 256 种颜色保存您的漫画,并观察尺寸减小很多。根据您的具体绘画风格,我就足够了。

于 2009-01-08T02:02:41.503 回答
1

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

编辑:我刚试了一张我的灰度手绘图;TIFF 可以以大约 2:1 击败 PNG(43K 与 83K 使用 ImageMagick 转换从原始 TIFF -> PNG -> TIFF 再次再次检查 ImageMagick 是否生成两种文件格式并确保我的原始程序没有这样做制作 TIFF 的工作很糟糕),但这仅仅是因为 TIFF 使用 8 位/像素(灰度)而 PNG 使用 24 位/像素(RGB)。

编辑2:没关系,我只是能够用来pngcrush -c 0确保图像是灰度的。PNGcrush 将 RGB 版本降至 67K,灰度降至 34K。好的!

编辑3:只是一个程序点:在我看来,选择这种类型的许多不同图像作为标准基准,并在基准集中尝试不同的技术,这会更有意义,而不仅仅是一堆堆溢出的东西。这似乎是一个需要经过充分测试的经验解决方案的问题。

于 2009-01-08T17:05:09.840 回答
0

对于笔墨图像,GIF 中的压缩方案可以创造奇迹。

JPEG 压缩不适合这种图像。

于 2009-01-08T01:40:36.757 回答
0

无论无损压缩有多好,有损压缩总是更好,因为它的限制更少。

想象一下,有一天他们为漫画发明了一些比 jpeg 更好的无损压缩,显然第二天有人会修改它以压缩更多,甚至可能,如果这意味着一些信息丢失了。

于 2009-01-08T01:48:43.463 回答
0

绘制与未绘制,网络漫画与任何其他类型的图像......这不相关。网络漫画的绘制方式或颜色布局的细节或您认为不同的任何东西。但你可以打赌,几十年的图形研究和开发已经充分考虑到了这一点,而以图形优化为生的人们已经突破了极限。

如果有比 JPEG、GIF、PNG 等更好的压缩算法,那么您不认为它会被广泛使用吗?如果您正在寻找最近的突破,那么我认为您可能是在浪费时间,因为 1) 您必须花费相当多的精力来使您的前端压缩与人们使用的任何查看器兼容(例如浏览器) 和 2) 如果它从当前格式中获得显着收益,那么它将很快得到广泛传播。


如果我被否决了,我一定没有很好地解释自己。

认为网络漫画属于某个特殊领域,因为它们是手绘或有很多颜色重复,这有点愚蠢。找到相同颜色的大块是图像压缩的绝对基础之一。

为自己找一个好的图形程序,并使用您的特定图像,看看它的哪种导出格式产生最小的图像尺寸,同时保持您想要的质量。对于不同的图像,它会有所不同。

于 2009-01-08T02:01:31.583 回答
0

在抗锯齿和渐变之间,图像中的颜色可能比您想象的要多。

于 2009-01-08T02:16:10.337 回答
0

作为一个为漫画做过很多着色工作的人,以及照片处理工作,我可以肯定地说,与普通照片相比,普通网络漫画内部经常发生很多事情。

假设图像是在 Photoshop 或 Painter(通常来自平板电脑)中完成的,那么在一般的网络漫画中通常会有许多过滤器或图层在起作用。阴影,反射,不透明度,背景图像等等都进入了方程式,其中许多直接来自过滤器或图层叠加,通常有许多颜色。

很多时候你必须考虑你的听众。如果您每天有 20 个访问者,那么优化您的图像真的值得吗?我可能会争辩说,这完全取决于您的网络漫画的大小和内容。如果您可以摆脱PNG,那么我会坚持使用它。在网络漫画中,通常很少有理由使用 JPG。

于 2009-01-08T03:31:34.397 回答
0

我使用 OPTIPNG 来获得最佳过滤器(具有健全的水平),然后运行 ​​ADVDEF -4 -z
http://advancemame.sourceforge.net/comp-readme.html(不是 Advpng,因为 Advpng 删除了过滤器)以优化放气。

你也可以试试 pngout http://www.advsys.net/ken/utils.htm 有一个 Irfanview 插件。它使用与 Kzip 相同的 deflate 实现,通常甚至比 7-zip 更好,但速度要慢得多。

编辑:
okcancel20031003.gif你最喜欢的“程序员”卡通片是什么?256 色 147KB
PNG(油漆) 126KB
PNG(Irfanview) 120KB

PNG (Irfanview) +
Optipng -o5 120KB(小 525 字节) 9s
Optipng + ADVDEF 114 KB 9s+0.9s
PngOut 114 KB 6s

273 KB

BMP +
7z (LZMA -fb 273) 107 KB
RAR (最佳) 116 KB
BMF -S 90 KB 0.3s
Paq8o10t -4 79 KB 35s

于 2009-01-08T03:33:11.773 回答
-1

我认为这里缺少的信息是Image Compression is Tied to the Format。当然,有人可以提出一种非常适合网络漫画家创作的图像的压缩算法。但是,一旦您采用新的 uber-comic-image 格式并发出 PNG、JPG 或 GIF,颜色信息将受制于 PNG、JPG 或 GIF 压缩机制的规则,您将失去您的所有好处新的图像格式。

这是另一种思考方式。

  1. 将照片另存为低质量 JPEG
  2. 注意文件大小
  3. 把那个低质量的 jpeg 保存为 24/32 位 PNG
  4. 注意较大的文件大小

这种神话般的超级漫画图像格式也会发生同样的事情。

另一种选择是让主要的浏览器供应商支持超级漫画图像的诞生。我将把不作为练习的原因留给观众。

于 2009-01-08T02:35:39.330 回答