如何调整图像大小以适应最小画布上的所有内容?

如何调整图像大小以适应最小画布上的所有内容?

我试图快速检查差异在 a 的单独迭代之间网站 使用 ImageMagick 的compare.但它拒绝比较图像不同尺寸,并且似乎没有一个选项可以简单地模拟锚定在角落的无限画布。-subimage-search这不是我想要的,原因如下:

  • 我不知道哪一张图像更大(我怀疑它不支持图像 A 和 B,其中 A 最高,B 最宽)
  • 我只是想将图像锚定在同一个角落。搜索最佳匹配可能需要很多更长,并且不会给出更好的结果(为此目的)。

当前的解决方案有效,但感觉效率低下且笨拙:

max_width_1="$(identify -ping -format "%w" 1.png)"
max_width_2="$(identify -ping -format "%w" 2.png)"
max_width="$((max_width_1>max_width_2?max_width_1:max_width_2))"
max_height_1="$(identify -ping -format "%h" 1.png)"
max_height_2="$(identify -ping -format "%h" 2.png)"
max_height="$((max_height_1>max_height_2?max_height_1:max_height_2))"
convert -extent "${max_width}x${max_height}" -background transparent 1.png 1.png
convert -extent "${max_width}x${max_height}" -background transparent 2.png 2.png

答案1

变量缩写只是为了代码的视觉清晰度,无需更改实际的更长(对维护者更友好)的变量名。

identify可以通过使用一个实例而不是四个实例来减少功能代码,使用read来加载变量(使用效率低下来xargs保存一行代码),再加上几个bashisms:

read mw1 mh1 mw2 mh2 <<< $(identify -ping -format "%w %h " [12].png)
mw="$((mw1>mw2?mw1:mw2))"
mh="$((mh1>mh2?mh1:mh2))"
echo {1,1,2,2}.png | xargs -n 2 convert -extent "${mw}x${mh}" -background transparent 

或者也许使用数组而不是变量更干净:

read w[1] h[1] w[2] h[2] <<< $(identify -ping -format "%w %h " [12].png)
w[0]="$((w[1]>w[2]?w[1]:w[2]))"
h[0]="$((h[1]>h[2]?h[1]:h[2]))"
echo {1,1,2,2}.png | 
    xargs -n 2 convert -extent "${w[0]}x${h[0]}" -background transparent 

相关内容