【问题标题】:Need multiple -format info:-需要多种格式信息:-
【发布时间】:2017-04-11 22:25:08
【问题描述】:

我需要调整图像大小并清理 exif 数据,但从源图像big.jpg 输出 exif 数据,并为small.jpg 输出转换后的图像大小。

不输出exif数据:

gm convert big.jpg -format "%w %h %[exif:DateTime]" -strip -resize "250x250>" -write small.jpg info:-

不输出转换后的图像大小(small.jpg):

gm convert big.jpg -format "%w %h %[exif:DateTime]" -write info:- -strip -resize "250x250>" small.jpg

如何正确操作? 谢谢。

【问题讨论】:

    标签: graphicsmagick


    【解决方案1】:

    我有两个解决方案给你 - 一个丑陋的,一个非常丑陋的! :-)

    首先提取 EXIF 数据,将其写入stderr,这样它就不会通过管道传递,然后将图像(内部 MIFF => Magick 图像文件格式)通过管道传输到第二个 convert 进行调整大小并打印调整后的大小:

    gm convert big.jpg -format "%[exif:DateTime]" -write info:/dev/fd/2 miff:- | gm convert miff:- -strip -resize "250x250>" -format "%w %h" -write info:- small.jpg
    2017:04:06 09:12:02
    250 107
    

    第二种方法可能更有效,因为它只加载一次原始图像并将其存储在两个处理步骤之间的 MPR(Magick Persistent Register)中。这两个步骤在单个 GraphicsMagick batch 进程中运行:

    cat - <<EOF | gm batch -prompt off
    convert big.jpg -write mpr:orig -format "%[exif:DateTime]" info:-
    convert mpr:orig -strip -resize "250x250>" -format "%w %h" -write small.jpg info:-
    EOF
    

    这两个都包含 "bashisms",因此您需要在 bash 下运行它们。

    【讨论】:

    • 感谢您的回答,但我知道如何在两个电话中做到这一点:) 我想在一个电话中变得美丽。
    • 从技术上讲,第二个是对gm batch 的一次调用。
    • 我们使用gm batch作为子工作进程,从stdout获取结果,我测得速度相差30%,对比一次调用两次,现在我们使用两次调用。
    • 可惜不能使用动态变量,那就这样convert big.jpg -set myVar %[exif:DateTime] -format "%w %h %[myVar]" -strip -resize "250x250&gt;" -write small.jpg info:-
    • 如果您选择 ImageMagick 而不是 GraphicsMagick,这正是它的工作方式 - 只需将您的 convert 替换为 magick跨度>
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多