使用magick调整图片大小-尺寸-dpi-格式

通过命令行进行图片格式转码具有高效、快捷的优势,对于需要批量处理的图片格式转化,能够更好的做到快速优化。

图片调整目标

根据出版社要求,论文中的图片必须是jpg格式的,同时图片的大小不超过15cm,像素密度72-300dpi之间。

为了保证图片的清晰度,平衡体积的情况下,选择dpi=200,图片宽度1200pix,高度1800pix

命令行批量处理图片

使用开源免费软件imagemagick批量处理图片,软件从官网下载安装,安装完成后就可以在命令行通过代码进行图片转码了。
https://imagemagick.org/Usage/resize/

(1)把图片转成jpg格式
magick mogrify -format jpg *.png *.PNG
把文件夹所有png转成jpg格式,从电脑上制作图片或截图的时候,有很多图片是PNG格式的。

(2)调整图片的宽度和高度
magick mogrify -resize "1200x1800>" *
把文件夹中所有图片尺寸缩小到1200宽1800高以内,只对分辨率大于这个数值的图片进行处理,小于此分辨率的图片不处理。分辨率小于该数值的图片,按照200dpi设置后,宽高均不超过出版社要求。

(3)调整图片的像素密度
magick mogrify -density 200x200 *.jpg
把文件夹中所有图片DPI调整到200,在确保图片分辨率的情况下,单纯改动图片的dpi数值,保证图片清晰度和打印尺寸符合出版社要求。

汇总,可以把以上三个步骤的内容合并到一个*.bat文件中,一键完成文件夹中的所有图片处理。

magick mogrify -resize "1200x1800>"   *
magick mogrify -format jpg  *.png  *.PNG
magick mogrify -density 200x200 *.jpg

命令imagemagick处理图片指令说明资料

imagemagick的指令有几种写法,当使用安装版的时候,统一“magick”作为起始命令,当使用portable版本的时候,解压得到“convert ”“mogrify”等几个不同的软件,但控制参数基本相同。

根据实际情况,可以通过-help命令查看相关软件的控制参数,以及相关参数可选范围。

Convert的resize子命令,可以实现图片大小缩放
参数测试设定值:
命令格式:

-resize "WidthxHeight"{%} {@} {!} {<} {>} {^}

可选择的参数:
-path-format
参数1: -format 指定输出的文件格式,
参数2: -path 则指定输出的文件目录。

下面结合具体的图片案例,对resize参数进行说明。
案例中采用的原始图片(input.jpg),宽度:200,高度:150。

  1. 默认时,宽度w和高度h表示输出图像尺寸上限,并自动按比例进行缩放。

如:convert -resize 600×600 input.jpg output.jpg
转换后的output.jpg的图片大小(宽度为600,而高度已经按比例调整为450).

2.如果需要强制转换成固定宽度W和高度H,不保持原有比例,则在宽高后面加上一个感叹号!
如:convert -resize 300×300! input.jpg output.jpg

  1. 只指定高度,图片会转换成指定的高度值,而宽度会按原始图片比例进行转换。
    如:convert -resize 400 input.jpg output.jpg
    转换后的output.jpg的图片大小(宽度为400,而高度已经按比例调整为300),和例1有点类似。

  2. 默认都是使用像素作为单位,也可以使用百分比来形象图片的缩放。
    如:convert -resize 50%x100%! input.jpg output.jpg
    或者convert -resize 50%x100% input.jpg output.jpg
    此参数只会按你的比例计算后缩放,不保持原有比例。(结果尺寸为100×150)

5.使用 @ 来指定图片的像素个数。
如:convert -resize “10000@” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(115×86),图片保持原有比例(115×86= 9080 < 10000)。

6.当原始文件大于指定的宽高时,才进行图片放大缩小,可使用>命令后缀。
如:convert -resize “100×50>” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(67×50),图片保持原有比例。
如:convert -resize “100×50>!” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(100×50),图片不保持原有比例。

7.当原始文件小于指定的宽高时,才进行图片放大转换,可使用<命令后缀。
如:convert -resize “100×500<” input.jpg output.jpg
或者convert -resize “100×100<!” input.jpg output.jpg
此命令执行后,output.jpg和input.jpg大小相同,因为原始图片宽比100大。
如:convert -resize “600×600<” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(600×450),图片保持原有比例。
如:convert -resize “600×600<!” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(600×600),图片不保持原有比例。

8.使用^命令后缀可以使用宽高中较小的那个值作为尺寸
如:convert -resize “300×300^” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(400×300),图片保持原有比例
(300:300 < 200:150,选择高作为最小尺寸)。

如:convert -resize “300×200^” input.jpg output.jpg
此命令执行后,output.jpg图片大小为(300×225),图片保持原有比例
(300:200 > 200:150,选择宽作为最小尺寸)。

官方资料

https://imagemagick.org/Usage/resize/
ImageMagick Examples – Resize or Scaling (General Techniques)

官方网站对于ImageMagick的resize参数做了详细的说明,机器翻译了一些,可以参考理解resize指令的控制精要。
(1)、优先保持宽高比例Ratio,不会造成图片扭曲变形。
(2)、可以选择只缩小较大的图片,或只拉伸较小的图片,实现图片目标上限或下限的控制。

参数resize将使图像到请求的大小。

它不会填充,所请求的图像大小。
基本保持长宽比Ratio,使输入图像中的任何圆在输出图像中都保持一个圆。也就是说,图像不会被挤压,只会调整大小,除非你告诉它。
例如,在这里,我尝试将两个源图像,一个较大的图像和一个较小的图像匹配到一个64x64大小的正方形画布。

magick dragon_sm.gif    -resize 64x64  resize_dragon.gif
magick terminal_sm.gif  -resize 64x64  resize_terminal.gif

正如你所看到的,一个64x64平方的图像不是由“-resize”产生的。事实上,这些图像只是被放大或缩小,以便最适合给定的大小。

忽略高宽比(“!”)

如果你想,你可以强制“调整大小”忽略高宽比和扭曲图像,所以它总是生成一个图像完全指定的大小。这是通过添加字符“!”的大小。不幸的是,这个字符有时也用于各种UNIX命令行外壳,用于特殊目的。所以你可能不得不以某种方式逃离这个角色来保护它。

magick dragon_sm.gif    -resize 64x64\!  exact_dragon.gif
magick terminal.gif  -resize 64x64\!  exact_terminal.gif

只缩小较大的图像(“>”flag)

另一个常用的选择是限制IM,使它只会缩小图像,以适应给定的大小。永远不要扩大。这是“>”调整大小的选项。想想看,它只应用于图像的调整大小,以“大于”给定的大小。

magick dragon_sm.gif    -resize 64x64\>  shrink_dragon.gif
magick terminal.gif  -resize 64x64\>  shrink_terminal.gif

这个选项通常对于节省图像的磁盘空间,或在缩略图生成中非常重要,但放大图像通常可能不可取,因为它往往会产生“模糊”放大。
唯一收缩flag(“>”flag)在UNIX Shell和窗口批处理脚本中都是一个特殊字符,您需要转义该字符(在Shell中使用反斜杠“>”,在窗口批处理中使用“^>”)。它在HTML网页中也是特殊的,所以PHP脚本也可能需要一些特殊的处理。

只放大较小的图像(“<”flag)

与前一个flag相反的词是“<”,它只会放大小于给定大小的图像,但很少被使用。
最显著的用途是使用一个参数,如“1x1<”。这个调整大小的参数实际上永远不会调整任何图像的大小。换句话说,这是一个无操作,它将允许你短路的程序调整大小操作和脚本总是使用“调整大小”。除此之外,您可能并不想使用这个特性。
使用这种“短路”参数的这样一个例子是对于“魔法蒙太奇”的“-几何”设置。参见蒙太奇和几何,更多细节。
唯一放大flag(“<”flag)在UNIX Shell和窗口批处理脚本中都是一个特殊字符,您需要转义该字符(在Shell中使用反斜杠“<”,在窗口批处理中使用“^<”)。“<”在HTML网页中也是特殊代码,所以PHP脚本可能也需要一些特殊的处理。

填充区域flag(“^”flag)

根据IM v6.3.8-3,IM现在有了一个新的图形尺寸调整选项flag“^”,用于根据最小的拟合尺寸来调整图像的大小。也就是说,图像被调整大小,以完全填充(甚至溢出)给定的像素区域。

magick dragon_sm.gif    -resize 64x64^  fill_dragon.gif
magick terminal.gif  -resize 64x64^  fill_terminal.gif

当与中心(或非中心)“裁剪”或“范围”结合来删除图像的多余部分时,可以匹配图像,以完全填充指定的区域。调整大小和最终的图像大小参数都应该是相同的值。
虽然“-crop”是最合理的,但它可能需要一个额外的“+回复”来删除虚拟画布分层信息。“-extent”不需要进行清理,但仍然允许使用“-gravity center”进行定位。有关更多信息,请参见切割和边界。

magick dragon_sm.gif      -resize 64x64^ \
        -gravity center -extent 64x64  fill_crop_dragon.gif
magick terminal.gif    -resize 64x64^ \
        -gravity center -extent 64x64  fill_crop_terminal.gif