2012-01-25 57 views
4

我需要减少彩色扫描的文件大小。缩放和减少颜色以减少扫描的文件大小

到现在为止,我认为应该进行以下步骤:

  • 选择性模糊(或类似),以减少噪音
  • 规模〜120DPI
  • 减少颜色

最多到现在我们使用convert(imagemagick)和net-ppm工具。

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

任何提示赞赏。

更新

例如:

赏金

带有可复制解决方案的最小且可读性较好的example.png缩小文件获得赏金。该解决方案只需要使用开源软件。

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

更新

我得到了黑色和白色的输出效果非常好(谢谢)。减少到约16或32种颜色的颜色会很有趣。

+0

相关问题从贵宾库:https://github.com/jcupitt/libvips/issues/9 – guettli

+0

什么是你的最后文件要求?什么需要能够阅读它们? (例如,它们必须是png,还是可以是另一种格式?如果是另一种格式,它们可以是专有格式还是通常未使用的格式?)另外,什么样的扫描?它们是否总是具有相对较少颜色的文档?他们是否全面照片?另外,您可以花多少时间处理它们?他们总是关于你的例子的维度? – Kaganar

+0

我更新了这个例子。让我们将example.png尽可能小。更多颜色,其他尺寸或输出格式目前并不重要。 – guettli

回答

3

绑定这是一个相当开放式的问题,因为还是有可能的空间图像质量和图像尺寸之间的柔性..毕竟,使它成为黑白色并用CCITT T.6压缩它的黑白(传真式)压缩将打败绝大多数即使不是所有具有彩色功能的压缩算法。

如果你愿意去黑与白(不灰度),那么做!它使文件非常小。

否则,我推荐一系列较小的图像转换和自适应预测树(参见here)。 APT软件包是开源或公有领域,非常易于编译和使用。它的优点是它在各种图像类型(特别是文本)上表现良好,并且可以缩放图像大小与图像质量更好,而不会失去可读性。 (我发现自己压扁一个example_1000尺寸的彩色版本到48KB可读性的门槛,和64K具有明显的假象,但易于阅读)

我结合APT与ImageMagick的tweakery:

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 

为了解释的ImageMagick设置:

  • -resize 50%尽可能缩小处理速度。还隐藏了一些打印和扫描工件。
  • -selective-blur 0x4+10%:锐化实际上会产生更多噪音。你真正想要的是一种选择性的模糊(就像在Photoshop中),当没有“边缘”时模糊。
  • -brightness-contrast -5x30:在这里,我们增加对比度,以削减由页面轮廓引起的不良着色(导致较少的可压缩数据)。我们也会稍微变暗以使黑色变黑。
  • -resize 80%最后,我们调整大小比您的example_1000图像大小稍大。 (足够接近。)这也减少了明显的工件的数量,因为当像素合并在一起时它们有些隐藏。

在这一点上,你将在这个例子中有一个美丽的图像 - 漂亮,平滑的颜色和清晰的文字。然后我们压缩。 20的质量值是一个相当低的设置,它不像看起来那么漂亮,但文件非常清晰。即使在质量值为0的情况下,它仍然大部分是清晰的。

同样,使用ADT并不一定会导致此图像的最佳效果,但它不会变成完全无法识别的像渐变等类似照片的内容,所以您应该更好地理解更多类型或意外类型的文件。

结果: 88kb 76kb 64kb 48kb

Processed image before compression

+1

处理imagemagick时典型的明显优化:不要使用imagemagick!这很慢。如果你很勇敢,那么使用imagemagick编程我们所做的并不是太难,除非可能调整大小。 (也许GD图形库将使事情变得更简单?) – Kaganar

+0

谢谢你的回答。我给了你赏金。 – guettli

1

如果您已经使用Imagemagick实用程序“convert”进行了正确的操作,那么首先查看Imagemagick库可能是个好主意。

扫了一眼我的Ubuntu软件包列表显示的Perl,Python和Ruby,C++和Java

+0

Imagemagick非常慢,并没有(AFAIK)使用多个CPU。 – guettli

+0

您在要求中没有提到速度方面的任何内容。 – Fantius

+0

是的,我改变了主意。起初,我希望图像尽可能小。我可以稍后进行优化。 – guettli

3

如果你真的不关心的颜色数,大家不妨去黑色和白色,并使用双层编码器。我最终使用了DJVU格式,因为它与JBIG2相比很好,并且具有开源编码器。在这种情况下,我使用didjvu编码器,因为它取得了最好的结果。 (在Ubuntu,你可以apt-get的安装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。

在这里看到的视觉效果:在github问题http://img29.imageshack.us/img29/687/exampledjvu.png