【发布时间】:2019-01-29 10:12:54
【问题描述】:
我有一个 bash oneliner,我在其中多次通过相同的 ImageMagick 操作对一张图像进行管道传输。我想将其作为 Bash 循环执行,最好不使用临时文件。
oneliner 是:cat in.jpg | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- > out.jpg
这个也可以:(convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:-) > out.jpg < in.jpg
在convert 命令中,- 表示“从标准输入读取”,jpg:- 表示“以 JPEG 格式输出到标准输出”。
我尝试过cat in.jpg | for x in {1..3}; do convert -quality 1 - jpg:-; done > out.jpg 和(for x in {1..3}; do convert -quality 1 - jpg:-; done) < in.jpg > out.jpg,但都给出了相同的错误。
我希望得到应用了所有 3 个操作的输出文件,但我得到的输出文件只应用了一个操作和以下错误,我认为这意味着第一次迭代可以读取in.jpg 文件,但以下迭代在标准输入上没有得到任何东西:
convert: no decode delegate for this image format `' @ > error/constitute.c/ReadImage/501.
convert: no images defined `jpg:-' @ error/convert.c/ConvertImageCommand/3210.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
convert: no images defined `jpg:-' @ error/convert.c/ConvertImageCommand/3210.
(我通过运行(for x in 90 30 1; do convert -quality $x - jpg:-; done) < in.jpg > out.jpg确认这只是第一次迭代触及输出文件
【问题讨论】:
-
你到底想用那个命令做什么?
-
我觉得我不需要向你解释我的艺术,沃伦。 ????
-
@MarkSetchell 抛开所有的玩笑不谈,我正在探索用于艺术和/或喜剧目的的有趣压缩文物。????
-
@MarkSetchell 实验表明,ImageMagick 很聪明,可以在以与现有质量相同的质量保存图像时重新压缩图像。添加中间 PNG 转换有帮助。
标签: bash loops imagemagick pipe