如何从命令行 (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
标题为 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