Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ImageMagick输出存储到Bash变量中(然后使用它)?_Bash_Imagemagick_Imagemagick Convert - Fatal编程技术网

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

如何将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。所以我需要计算在修剪和调整大小之间的图像大小。我只想做一次修剪操作来做一点优化 所以,我想: 修

我使用ImageMagick,需要对图像进行有条件的调整大小

为此,我将
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--解码