通过命令行压缩具有不同页面格式的多页TIF文件

时间:2012-06-12 22:17:55

标签: image-processing automation compression imagemagick

我们的文档管理系统中包含大量多页TIF文件(主要是文档扫描)。通过各种历史问题和最终用户的误解,大量这些误解比他们需要的大得多(例如,它们将以比所需更高的分辨率扫描,或者在没有压缩的情况下存储)。

我一直在寻找的是处理其中一些文档并进行一些优化,以便获得一些宝贵的存储空间(我已经恢复了25GB,只是拿出了非常低的水果)。

到目前为止,我一直在使用ImageMagick和Irfanview的组合,但我真的希望自动化这个过程,因为它目前非常耗费人力。我在创建一些脚本时遇到了麻烦,但不幸的是,有问题的TIF的性质证明是有问题的。

特别是,它们中的大多数都包含混合页面格式;基本字母页面的双层/ 1位页面和图像/地图/计划的全彩色RGB页面。大多数文档都有这些类型的混合,并不总是按照任何特定的顺序(实际上它们可能在这两种格式之间来回传递)。

理想情况下,我想在双层页面上使用第4组传真压缩,在彩色页面上使用JPEG压缩(因此在ImageMagick中使用-compress group4 / -compress jpeg标志),但似乎没有任何办法(我可以告诉 - 我对IM的经验有限,以每页格式为基础设置压缩。有谁知道这是否可能?或者,任何人都可以推荐具有此功能的脚本化工具吗?

Irfanview可以进行每页压缩,但必须通过GUI逐页手动设置,这显然不太理想。

任何提示都将不胜感激!

1 个答案:

答案 0 :(得分:3)

由于我没有示例TIFF文件显示您描述的特征(混合格式,不同的压缩方案和不同页面的颜色空间......),这是第一次拍摄。

要自动处理多页TIFF,您需要知道可以通过将基于零的索引号[n]附加到文件名来单独访问每张图片。

此外,您应该查找list of ImageMagick escpape shortcuts,这样您就可以构造一个identify -format <%escapestrings>命令,该命令会自动从文件中提取有趣的位,然后您将使用该位作为进一步处理的基础。

因此,通过运行带有自定义identify字符串的-format来识别不同TIFF页面之间的各种特征,启动项目,例如:

for i in $(seq 1 $(identify -format %n multipage.tiff)); do 
  identify -format \
    "scene-number:%s \
     image-width-in-pixels:%w \
     image-height-in-pixels:%h \
     x-resolution:%x \
     y-resolution:%y \
     image-depth:%z \
     imageclass+colorspace:%r \
     image-compression-type:%C \
     image-compression-quality:%Q \
     page-width:%W \
     page-height:%H" \
   multipage.tiff[$i]; 
 done

(出于教育原因,故意使其更加冗长......)

基于此,您应该能够提供满足您需求的shell脚本。