我想用 ImageMagick 改变 DPI 而不改变图像数据的实际字节大小

Bor*_*pen 51 linux gimp bash imagemagick image-processing

在 GIMP 中有一种非常简单的方法可以做我想做的事。我只安装了德语对话框,但我会尝试翻译它。我说的是转到Picture -> PrintingSize然后调整值X-ResolutionY-Resolution我知道这些值是所谓的 DPI 值。您还可以选择默认为Pixel/Inch. (在德语中,对话是Bild -> Druckgröße,那里X-AuflösungY-Auflösung

好的,72默认情况下通常有这些值。当我将它们更改为例如300这会导致图像在计算机上保持不变,但是如果我打印它,如果您查看它会更小,但所有细节仍然存在,只是更小 - >它有打印纸的分辨率更高(但尺寸更小......这对我来说很好)。

我在使用 LaTeX 时经常这样做,或者准确地说是pdflatex在最近的 Ubuntu 机器上使用命令。当我手动使用 GIMP 执行上述过程时,一切正常。图像在生成的 PDF 中看起来更小,但打印质量很高。

我想要做的是自动化进入 GIMP 和调整 DPI 值的过程。由于众所周知 ImageMagick 非常出色,并且我将它用于许多其他任务,因此我试图通过此工具实现我的目标。但它并没有做我想要的。

在尝试了很多事情之后,我认为这实际上是我应该成为朋友的命令:

convert input.png -density 300 output.png
Run Code Online (Sandbox Code Playgroud)

这应该将 DPI 设置为 300,因为我可以在网络上的任何地方阅读。它似乎工作。但是当我检查文件时它保持不变(编辑:这是我所期望的,如上所述)。

file input.png output.png
     input.png: PNG image data, 611 x 453, 8-bit grayscale, non-interlaced
    output.png: PNG image data, 611 x 453, 8-bit grayscale, non-interlaced
Run Code Online (Sandbox Code Playgroud)

当我使用这个命令时,它似乎做了我想要的:

identify -verbose output.png | grep 300
    Resolution: 300x300
    PNG:pHYs                 : x_res=300, y_res=300, units=0
Run Code Online (Sandbox Code Playgroud)

有趣的是,同样的输出让input.png我感到困惑......所以这可能是错误的参数?

但是当我现在用pdflatex图像渲染我的 TeX 时,图像仍然很大而且很模糊。此外,当我再次使用 GIMP 打开图像时,DPI 值设置为72而不是300. 所以实际上根本没有效果。

现在这里有什么问题。我有什么完全错误的吗?我不会错,因为 GIMP 一切正常。

感谢您在这方面的任何帮助。我也对在 Linux 系统上很容易完成的其他自动化解决方案持开放态度。

Mar*_*son 86

指定单位 - 我似乎记得在我省略此选项时遇到了问题(尽管 DPI 应该是默认值),例如:

convert -units PixelsPerInch input.png -density 300 output.png
Run Code Online (Sandbox Code Playgroud)

您知道 GIMP 使用哪些嵌入数据字段来读取分辨率 - 它是否有自己的覆盖 ImageMagick 使用的标准字段?例如,Photoshop 使用Photoshop:XResolutionPhotoshop:YResolution所以你必须为 Photoshop 设置这些来识别密度设置(ImageMagick 不能这样做 - 我们使用 ExifTool)。

  • 我需要在 `input.png` 之前放置 `-density 300`。我正在转换PDF。不管怎么说,还是要谢谢你。 (3认同)
  • 对于 PNG 到 TIFF 的转换,我需要使用“-设置单位 PixelsPerInch -密度 300”,无论选项的顺序如何,简单的“-units”都不起作用。 (2认同)