如何将ImageMagick输出存储到Bash变量中(然后使用它)?

时间:2015-06-16 17:11:07

标签: bash imagemagick imagemagick-convert

我使用ImageMagick并需要对图像进行条件调整。

为此,我将identify工具的结果存储到变量中。

$infile='test.jpg'
width=$(identify -ping -format %w $infile)
height=$(identify -ping -format %h $infile)

但在调整大小之前,我想进行一些改变图像大小的转换:-trim-shave。所以我需要在修剪和调整大小之间计算图像大小。而且我只想进行一次修剪操作以进行一些优化。

所以,我想:

  1. 做修剪和剃须
  2. [binary] 存储在变量中(例如:$data
  3. $data变量值作为输入传递给identify工具并存储其结果以进行条件调整大小
  4. $data传递给convert工具并完成处理
  5. 这样的事情:

    data=$(convert logo: -shave 1x1 gif:-)
    width=$(echo $data | identify -ping -format %w gif:-)
    echo $data | convert -resize "$width"
    

    echo无法正常运作。

    P上。 S. convertidentifytools from ImageMagick suite

1 个答案:

答案 0 :(得分:5)

Bash无法存储可能包含NULL终止字符的数据blob。但您可以将数据转换为base64,并使用ImageMagick的fd:协议。

# 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" -