缩放和减少颜色以减少扫描的文件大小



我需要减少彩色扫描的文件大小。

到目前为止,我认为应该采取以下步骤:

  • 选择性模糊(或类似)以减少噪声
  • 缩放至约120dpi
  • 减少颜色

到目前为止,我们使用convert(imagemagik)和netppm工具。

扫描的是发票,而不是照片。

如有任何提示,不胜感激。

更新

示例:

  • http://www.thomas-guettler.de/tbz/example.png1100万
  • http://www.thomas-guettler.de/tbz/example_0800_pnmdepth009.pngpnmscale,pnmdepth 110K
  • http://www.thomas-guettler.de/tbz/example_1000_pnmdepth006.pngpnmscale,pnmdepth 116K

赏金

拥有可复制解决方案的example.png的最小且可读性良好的精简文件将获得奖励。该解决方案只需要使用开源软件。

文件格式并不重要,只要您可以再次将其转换为PNG即可。处理时间并不重要。我可以稍后进行优化。

更新

我在黑白输出方面得到了很好的结果(谢谢)。将颜色减少到大约16或32种颜色将是令人感兴趣的。

这是一个相当开放的问题,因为图像质量和图像大小之间仍有可能存在灵活性。。。毕竟,将其制成黑白并用CCITT T.6黑白(传真式)压缩将击败大多数(如果不是所有颜色都支持的话)压缩算法。

如果你愿意黑白(而不是灰度),那就去做吧!它使文档变得非常小。

否则,我推荐一系列次要的图像转换和自适应预测树(请参阅此处)。APT软件包是开源或公共领域的,非常易于编译和使用。它的优点是,它在各种图像类型(尤其是文本)上都表现良好,并且可以在不损失可读性的情况下更好地缩放图像大小和图像质量。(我发现自己把一个1000大小的示例彩色版本压缩到可读性阈值的48KB,64K有明显的伪影,但可读性很容易。)

我结合了APT和imagemagick调整:

convert example.png -resize 50% -selective-blur 0x4+10% -brightness-contrast -5x30 -resize 80% example.ppm
./capt example.ppm example.apt 20  # The 20 means quality in the range [0,100]

并逆转的过程

./dapt example.apt out_example.ppm
convert out_example.ppm out_example.png

解释imagemagik设置:

  • -resize 50%将其缩小一半以加快处理速度。还隐藏了一些打印和扫描伪影
  • -selective-blur 0x4+10%:锐化实际上会产生更多的噪声。你真正想要的是一种选择性模糊(就像在Photoshop中一样),当没有"边缘"时会模糊
  • -brightness-contrast -5x30:在这里,我们将对比度增加了一点,以消除页面轮廓造成的不好的着色(导致数据压缩性降低)。我们也会稍微变黑,使黑色变黑
  • -resize 80%最后,我们将大小调整为比您的示例1000图像大小大一点。(足够近。)这也减少了明显的伪影的数量,因为当像素合并在一起时,它们在某种程度上是隐藏的

在这一点上,您将在这个例子中得到一个好看的图像——漂亮、平滑的颜色和清晰的文本。然后我们压缩。20的质量值是一个非常低的设置,它看起来不再那么整洁了,但文档非常清晰。即使质量值为0,它仍然基本清晰。

同样,使用ADT并不一定能为这张图像带来最佳效果,但它不会在渐变等类似照片的内容上变成完全无法识别的混乱,所以你应该更好地了解更多类型或意外类型的文档。

结果:88kb76kb64kb48kb

压缩前处理过的图像

如果你真的不在乎颜色的数量,我们还可以选择黑白并使用双层编码器。我最终使用了DJVU格式,因为它与JBIG2相比很好,并且具有开源编码器。在这种情况下,我使用了didjvu编码器,因为它获得了最好的结果。(在Ubuntu上,你可以安装didjvu,也许在其他发行版上也可以。)

我最终得到的魔术看起来像这样编码:

convert example.png -resize 50% -selective-blur 0x4+10% -normalize -brightness-contrast -20x100 -dither none -type bilevel example_djvu.pgm
didjvu encode -o example.djvu example_djvu.pgm --lossless

请注意,在全分辨率下,这实际上是一个优于0x2+10%的颜色模糊——这将使想象在转换为双层图像之前变得尽可能好。

解码工作如下:

convert example.djvu out_example.png

即使有更大的分辨率(更容易阅读),大小的权重也在24KB。当缩小到相同的大小时,它仍然是24KB!最后,在只有原始图像缩减的75%和0x5+10%模糊的情况下,它的权重为32KB。

有关视觉结果,请参见此处:http://img29.imageshack.us/img29/687/exampledjvu.png

如果您已经让它使用Imagemagik实用程序"convert"做了正确的事情,那么首先查看Imagemagik库可能是个好主意。

快速查看我的Ubuntu包列表,可以看到perl、python、ruby、c++和java的绑定

最新更新