blu*_*lue 77 image-manipulation conversion images gif
是否有返回图像像素大小的 shell 命令?
我正在尝试使用convert
(例如convert -delay 50 1.gif 2.gif -loop 0 animated.gif
)从不同大小的不同 gif 开始生成动画 gif 。
问题是转换只是使用第一个图像的大小作为动画 gif 的大小来重叠图像,并且由于它们具有不同的大小,因此结果有点混乱,旧帧的位显示在新帧下。
blu*_*lue 83
找到了一个解决方案:identify
,imagemagick 包的一部分,正是我需要的
$ identify color.jpg
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
Dan*_*etz 75
identify
您可以使用其-format
选项以最适合您的任何格式输出宽度和高度,而不是通过眼睛或文本实用程序来解析输出。例如:
$ identify -format '%w %h' img.png
100 200
$ identify -format '%wx%h' img.png
100x200
Run Code Online (Sandbox Code Playgroud)
您可以在此页面上找到可以输出的图像属性列表,但对于此处的问题,您似乎只需要%w
and %h
,它们分别以像素为单位给出图像的宽度和高度。
-format
通过输出%[fx:w*h]
多个图像并对输出进行排序,它提供的灵活性对我在查找像素方面的最大图像方面非常有用。
-ping
如果您正在处理许多图像,使用更复杂的转义,并且想要确保程序不会浪费时间加载整个图像,您可能需要指定该选项。使用简单的转义,-ping
应该是默认值。有关在-ping
和之间进行选择的更多信息,请+ping
参见此处。
Pas*_*iel 31
您可以使用命令“file”来获取您需要的信息:
~# file cha_2.png
cha_2.png: PNG image data, 656 x 464, 8-bit/color RGB, non-interlaced
Run Code Online (Sandbox Code Playgroud)
使用identify
看大小:
$ identify color.jpg
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
通过cut | sed
, 从字段 3 中提取值:
identify ./color.jpg | cut -f 3 -d " " | sed s/x.*// #width
identify ./color.jpg | cut -f 3 -d " " | sed s/.*x// #height
Run Code Online (Sandbox Code Playgroud)
赋值给变量:
W=`identify ./color.jpg | cut -f 3 -d " " | sed s/x.*//` #width
H=`identify ./color.jpg | cut -f 3 -d " " | sed s/.*x//` #height
echo $W
> 1980
echo $H
> 650
Run Code Online (Sandbox Code Playgroud)
您还可以尝试GraphicsMagick,它是 ImageMagick 的一个维护良好的分支,用于 Flickr 和 Etsy 等:
$ gm identify a.jpg
a.jpg JPEG 480x309+0+0 DirectClass 8-bit 25.2K 0.000u 0:01
Run Code Online (Sandbox Code Playgroud)
它比 ImageMagick 的识别速度快(在我的测试中大约是两倍)。