如何将ImageMagick输出存储到Bash变量中(然后使用它)?
我使用ImageMagick,需要对图像进行有条件的调整大小 为此,我将如何将ImageMagick输出存储到Bash变量中(然后使用它)?,bash,imagemagick,imagemagick-convert,Bash,Imagemagick,Imagemagick Convert,我使用ImageMagick,需要对图像进行有条件的调整大小 为此,我将identify工具的结果存储到变量中 $infile='test.jpg' width=$(identify -ping -format %w $infile) height=$(identify -ping -format %h $infile) 但是在调整大小之前,我想做一些改变图像大小的转换:-trim和-shave。所以我需要计算在修剪和调整大小之间的图像大小。我只想做一次修剪操作来做一点优化 所以,我想: 修
identify
工具的结果存储到变量中
$infile='test.jpg'
width=$(identify -ping -format %w $infile)
height=$(identify -ping -format %h $infile)
但是在调整大小之前,我想做一些改变图像大小的转换:-trim
和-shave
。所以我需要计算在修剪和调整大小之间的图像大小。我只想做一次修剪操作来做一点优化
所以,我想:
$data
)$data
变量值作为输入传递给标识
工具,并存储其结果以进行条件调整大小$data
传递到convert
工具并完成处理data=$(convert logo: -shave 1x1 gif:-)
width=$(echo $data | identify -ping -format %w gif:-)
echo $data | convert -resize "$width"
但是echo
不能按需要工作
p.S.
convert
和identify
是Bash无法存储可能包含NULL
终止字符的数据块。但是您可以将数据转换为,并使用ImageMagick的协议
# Store base64-ed image in `data'
data=$(convert logo: -shave 1x1 gif:- | base64)
# Pass ASCII data through decoding, and pipe to stdin file descriptor
width=$(base64 --decode <<< $data | identify -ping -format %w fd:0)
base64 --decode <<< $data | convert -resize "$width" -
#将基于64的图像存储在“数据”中
数据=$(转换徽标:-shave 1x1 gif:-| base64)
#通过解码将ASCII数据传递给stdin文件描述符
宽度=$(base64——解码外壳变量不是二进制数据安全的。例如,它们不能包含NUL。您不能在其中存储原始二进制。当您使用bash
时,您可以进行另一个优化,避免调用identify
两次,一次读取宽度,一次读取高度,就像这样read w h<谢谢,@MarkSetch嗯。我以前从未使用过Bash,所以它看起来像地狱。但我正在尝试。您可以自己运行包含的部分,以查看输入到read
命令的输出。运行此命令以查看内置向导文件的宽度和高度,或者将向导:
更改为您自己的一个图像的名称…identification-ping-format“%w%h”向导:
谢谢!输出重定向和其他bash功能比IM语法更让我心碎。:)很好的方法-请投票!对于阅读本文的任何其他人,您也可以使用连字符(-
)对于stdin
而不是fd:0
。啊,是的,最后一行缺少“-”符号。将更新应答感谢@MarkSetchell的(-)提示!即使使用“-”也有错误。base64--解码抱歉,这太愚蠢了。只需要在最后一行添加输出文件名:base64--解码