如何从命令行 (imagemagick) 对图像进行正方形和透明填充

How to square an image and pad with transparency from the commandline (imagemagick)

标题为 Square Padding or Cropping 的部分描述了一种生成方形图像(对于尺寸未知的文件)并用颜色填充背景的方法。

如何执行相同的操作,但创建一个透明背景。

最好使用纯 imagemagick 命令,但这里有一个脚本使用 'file' unix/linux 命令来提取文件的尺寸,然后可以将其用于将大小调整为正方形最大尺寸。

#!/usr/bin/env ruby

require 'shellwords'

def dims(image_escaped)
  size_data = `file #{image_escaped}`
  size_data[/, (\d+ x \d+),/, 1].split(' x ').map(&:to_i)
end

def square(image, pad_color='transparent')
  image_esc = Shellwords.escape(image)

  maxdim = dims(image_esc).max
  geometry = "#{maxdim}x#{maxdim}"

  # could use convert if don't want to clobber the image
  system "mogrify -resize #{geometry} -background #{pad_color} -gravity center -extent #{geometry} -format png #{image_esc}"
end

ARGV.each do |image|
  square(image)
end

先做一张红色的off-square图,即300x200:

convert -size 300x200 xc:red image.png

现在让我们制作它的正方形图像,但使用黄色背景以便您可以看到它:

convert -background yellow -gravity center image.png -resize 400x400 -extent 400x400 result.png

现在我们可以再次做同样的事情,但是把背景设为透明:

convert -background none -gravity center image.png -resize 400x400 -extent 400x400 result.png

并且,只需检查以确保它有效:

identify result.png
result.png PNG 400x400 400x400+0+0 8-bit sRGB 418B 0.000u 0:00.000

Anthony 示例中的这些修改方法对我都适用:

  convert thumbnail.gif \
      \( +clone -rotate 90 +clone -mosaic +level-colors grey -transparent grey \) \
      +swap -gravity center -composite    square_padded.gif

convert thumbnail.gif  -virtual-pixel none -set option:distort:viewport \
 "%[fx:max(w,h)]x%[fx:max(w,h)]-%[fx:max((h-w)/2,0)]-%[fx:max((w-h)/2,0)]" \
 -filter point -distort SRT 0  +repage  square_external.gif