如何更改PNG文件的DPI?(在命令行中,不带ImageMagick)


9

我正在寻找一种更改PNG图像文件上的DPI的方法。使用ImageMagick,这很容易:

$ convert -density 150 -units pixelsperinch file.png file.png

问题是我将在没有安装ImageMagick的多个VM上从我的应用程序运行此命令。我可以将升级包推送到这些VM,但是如果使用ImageMagick,则升级包将增加大约30MB,这对于我的用例来说有点过多。

长话短说:有什么方法可以使用小型(如程序包大小)命令行工具更改PNG文件上的DPI?

或者,如果有人知道在哪里寻找原始图像文件中的字节,也可以更改...


您可以考虑自己执行。操纵PNG块很简单。如果仅打算将一个特定的DPI应用于所有DPI,则甚至不需要工作校验和功能-只需pHYs从Photoshop中制作的PNG 复制一个预制块即可。
Zdenek

Answers:


6

2.10 MB足够小吗?如果是,请使用NConvert和类似以下的批处理命令:

nconvert -out png -dpi 150 -keepdocsize -keepfiledate mysource.png

NConvert的作用是什么?

XnView是基于GUI的应用程序,您可以使用图形用户界面更改和操作图像。NConvert具有与XnView几乎相同的功能,但它是一个命令行工具,没有图形用户界面。您可以在批处理脚本中使用NConvert或其他应用程序可以调用它。

有用的网址

  • 入门指南Wiki,并提供一些示例
  • 帮助文件以查看可用的命令行参数(在pastebin上上传)
  • 使用Nconvert的图形前端是XnConvert。使用它来创建和导出Nconvert批处理文件
  • Xnconvert和Nconvert的论坛

谢谢,看起来很棒,将来可能会派上用场!在这种情况下,我最终研究了PNG格式(很简单),并通过一个小型自定义应用程序(PHP中的15行)更改了图像。
约翰多多

@johndodo听起来很有趣。您可以与我们分享您的应用程序吗?
nixda

不幸的是,我并没有这样做的自由,但是您可以通过阅读(很棒!)PNG文件格式的规范并制作一个可以更改pHYs块的应用程序来做到这一点。一旦知道自己在做什么,这真的很简单。
johndodo

1

您提到您将“从您的应用程序”运行此命令,这使我相信您已经编写或正在维护该应用程序。就是说,有适用于多种语言的ImageMagick API,您可以使用其中一种将功能直接添加到现有程序中。程序包大小的增加将取决于您的应用程序使用哪种语言编写以及是否以静态或动态方式链接该库,但是我想这将大大小于30 MB的增加。

另一个选择是不包括整个ImageMagick软件包。您可以下载ImageMagick Zip文件(仅13 MB BTW),然后仅提取该convert工具及其依赖项,并将其分发给您的VM。有一个名为Dependency Walker的工具,可以用来确定该convert工具的依赖项。



0

好吧,您可能会使用python脚本。

#!/usr/bin/python
im = Image.open("in.png")
nx, ny = im.size
im2 = im.resize((int(nx*1.5), int(ny*1.5)), Image.BICUBIC)
im2.save("out.png")

来源


Python 3.3.2安装程序(不包括源代码)为19.3 MB,Python 2.7.5安装程序为15.5 MB。
Drew Chapin 2013年

5
这将调整图像的大小,而不更改DPI。
鲍比

0

为此,适当的Image Magick“转换”命令行将使用-resample参数:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.