【问题标题】:ImageMagick: Achieve multiple (and partially *conditional*) operations on an image with one single commandImageMagick:使用一个命令在图像上实现多个(部分*条件*)操作
【发布时间】:2014-11-15 22:13:22
【问题描述】:

对不起,如果我的问题不是一个复杂的难题,但我尝试了很多但没有达到我的预期:(

我如何使用 ImageMagic 同时实现所有这些目标(win32):

  1. 仅当(宽度/高度)大于 1000 像素时才调整(缩放)图像的大小,以使生成的图像的最大宽度/高度为 1000 像素或更小

  2. 将任何类型转换为 90% 质量的 JPG

  3. 在图片右下方放置商标(不是必需的,但最好有)

感谢您分享知识和经验

【问题讨论】:

  • 到目前为止你尝试过什么? IM 的文档非常丰富,我相信您可以通过浏览文档并进行一些在线搜索来了解如何执行这些操作。
  • 嗨,是的,我做到了,但每次都缺少一点,我都是单独做的,但我正在寻找一个命令
  • 为什么你需要用一个命令来做所有事情?为什么不是多个命令?另外,请修改您的帖子并输入您迄今为止尝试过的内容。
  • @ReticulatedSpline:很明显,OP 并不只需要单次转换,而是批量转换大量文件。如果您能够在单个命令中执行此操作,则可以节省大量 CPU 功率、大量时间、大量 RAM、大量用于将临时文件写入磁盘的磁盘空间以及再次清理临时文件的大量额外工作.

标签: imagemagick


【解决方案1】:

如果调整大小操作应该针对较大的图像进行,我假设您希望保留纵横比。

convert              \
  input-image        \
 -resize 1000x1000\> \
 -quality 90%        \
  output.jpg

请不要将\> 后缀添加到1000x1000 几何设置!这很关键。如果您因为忽略它而在命令中跳过它,那么该命令将无法按预期工作。

这个命令应该满足你的前两点。 resize 参数中的关键是\> 除了通常的{width}x{height} 部分。它告诉 ImageMagick 仅在宽度或高度超过 1000 像素时才调整输入文件的大小。 (\ 只是作为一种转义,以防止您的 shell 将 > 解释为重定向命令。)

为了包括第三点,我可以想象有 很多 不同种类的“水印”。我这里只展示一个非常简单的:

convert              \
  input-image        \
 -resize 1000x1000\> \
 -quality 90%        \
  \
       -fill white             \
       -undercolor '#00000080' \
       -gravity southeast      \
       -annotate +5+5          \
        ' My Trademark '       \
  \
  output.jpg

我希望这个例子能给你足够的想法,以便你继续自己的实验。


更新

由于 Jimmy B. 认为我的命令不起作用,让我用一个例子来证明我的情况......

创建三个示例图像

for i in 2000x2000 2000x500 500x2000; do
   convert -size $i  xc:red  red-${i}.jpg
done

检查示例图片的大小

identify red-*x*.jpg
  red-2000x2000.jpg JPEG 2000x2000 2000x2000+0+0 8-bit sRGB 23.7KB 0.000u 0:00.000
  red-2000x500.jpg[1] JPEG 2000x500 2000x500+0+0 8-bit sRGB 6.29KB 0.000u 0:00.000
  red-500x2000.jpg[2] JPEG 500x2000 500x2000+0+0 8-bit sRGB 6.29KB 0.000u 0:00.000

使用我的命令调整三个示例图像的大小

for img in red-*x*.jpg; do
   convert              \
     ${img}             \
    -resize 1000x1000\> \
    -quality 90%        \
     \
          -fill white             \
          -undercolor '#00000080' \
          -gravity southeast      \
          -annotate +5+5          \
           ' My Trademark '       \
     \
    resized-${img}
done

检查调整后图像的大小

identify resized-red-*x*.jpg
  resized-red-2000x2000.jpg JPEG 1000x1000 1000x1000+0+0 8-bit sRGB 7.43KB 0.000u 0:00.000
  resized-red-2000x500.jpg[1] JPEG 1000x250 1000x250+0+0 8-bit sRGB 3.31KB 0.000u 0:00.000
  resized-red-500x2000.jpg[2] JPEG 250x1000 250x1000+0+0 8-bit sRGB 2.99KB 0.000u 0:00.000

【讨论】:

  • 感谢您的好回答,但它将每张图像转换为 1000X1000 这不是我的意思,我的意思是如果图像是 2000x500(水平)或 500x2000(垂直)或 2000x2000(正方形)调整图像大小,以便最终图像的最大宽度或高度为 1000,因此图像将是 1000x250 或 250x1000 或 1000x1000。
  • @JimmyBrosnan:嘿,我的命令完全按照你想要的方式运行!我在 Mac OSX 上使用 ImageMagick 版本 6.8.9-8 Q16 x86_64 2014-10-03你的版本是什么?!?运行convert -version 找出答案。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多