ImageMagick改变图像的宽度和高度

时间:2014-10-25 07:56:39

标签: image imagemagick imagemagick-convert

我正在使用ImageMagick通过使用以下命令行选项

来调整图像分辨率

convert abc.png -set units PixelsPerInch -density 75 abc_a.png

我需要这个:如果任何图像的宽度超过300 超过100个高度,我想将其转换为宽度300宽度和100高度,并改变dpi以上(即75dpi)。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:3)

如果您使用的是Linux / OSX,则可以获得如下图像尺寸:

identify -format "%w %h" input.jpg

因此,如果您想要变量wh中的宽度和高度,请执行以下操作:

read w h < <(identify -format "%w %h" input.jpg)

现在您可以测试宽度和高度,并在必要时进行进一步处理:

[ $w -gt 300 -o $h -gt 100 ] && convert input.jpg -set units ...

或者,如果你想要更详细:

if [ $w -gt 300 -o $h -gt 100 ]; then
    convert ...
fi

所以,我提议的整体解决方案看起来像这样:

#!/usr/bin/bash
read w h < <(identify -format "%w %h" input.jpg)
[ $w -gt 300 -o $h -gt 100 ] && convert input.jpg -set units ...

JPEGPNG没有任何区别,因此如果您选择的格式是JPG,请将PNG替换为identify -format "%w" input.png > w.txt set /p w=<w.txt

针对Windows进行了更新

好的,没有其他人在帮忙,所以我会解决我(非常)生锈的Windows技能。在Windows下获取类似的图像宽度:

identify -format "%h" input.png > h.txt
set /p h=<h.txt

现在得到身高:

input.png

您现在应该在2个变量wh中拥有图像echo %w% echo %h% 的宽度和高度,请输入

进行检查
IF

现在你需要做一些if %w% LEQ 300 GOTO SKIP if %h% LEQ 100 GOTO SKIP convert .... :SKIP 陈述:

^

注意::在Windows中的百分号前面可能需要@

注意:您可能需要在脚本中使用双{{1}}个符号,因为Windows不合逻辑。

答案 1 :(得分:0)

无法同时控制-density宽度身高

创建图像时,密度(或分辨率)会自动将图像的宽度和高度调整为一定数量的像素(或者它将被忽略)。

密度(或分辨率),当显示图像时(如在浏览器窗口中,在HTML页面内或在PDF页面上),将不会更改原始图像尺寸:相反,它将会放大或缩小图像上的相应视图。

密度(或分辨率),当在图像的元数据中使用时(每种文件格式都不支持),不会改变图像尺寸 - 它只是提示显示软件,在什么缩放级别想要显示图像(每个图像查看器都不支持)。


现在问你的问题......

尝试此命令:

 convert abc.png -scale 300x100\> abc_a.png

仅当

时才会缩放图像
  • 原始图片的宽度大于300像素,
  • 原始图片的高度大于100像素。

缩放将保留原始图像的宽高比。 - 这是您要找的吗?

如果图像较小,则不会进行缩放,abc_a.png将具有原始尺寸。

如果你想 *强调将图像缩放到300x100,无论如何,并且宽高比都会松动,承受原始图像的一些失真,使用:

convert abc.png -scale 300x100\! abc_b.png

(但是,这也会缩小较小的图像......)