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

我的未来我决定 提交于 2020-01-23 12:05:24

问题


The section entitled Square Padding or Cropping describes a method to generate a square image--for a file whose dimensions are unknown--and pad the background with a color.

How do I perform the same operation, but create a transparent background.


回答1:


These modified methods from Anthony's examples both work for me:

  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



回答2:


Let's make a red off-square image first, that is 300x200:

convert -size 300x200 xc:red image.png

Now let's put make a square image of it, but using a yellow background so you can see it:

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

Now we can do the same thing again, but make the background transparent:

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

and, just check to make sure it has worked:

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



回答3:


A pure imagemagick command would be preferable, but here's a script that uses the 'file' unix/linux command to extract the dimensions of the file which can then be used on a resize to a square of the max dimension.

#!/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


来源:https://stackoverflow.com/questions/31713634/how-to-square-an-image-and-pad-with-transparency-from-the-commandline-imagemagi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!