我正在处理图片库应用程序,我们需要有条件地在具有白色或透明背景的图像周围添加填充,以使它们在我们页面的网格内看起来正常。
基本上我们需要:
有没有办法在一行或两行中使用ImageMagick执行此操作,还是需要使用其他库?
答案 0 :(得分:4)
这些方面的内容可能总结了以下所有内容:
#!/bin/bash
# By default, do not add border
addborder=0
# Get image geometry to see if IM thinks it has a border
geometry=$(identify -format "%g" "$1")
echo DEBUG: geometry: $geometry
# Ask IM what would happen if we trimmed image
trim=$(convert "$1" -format "%@" info:)
echo DEBUG: trim: $trim
if [ $geometry = $trim ]; then
echo DEBUG: Image does not have a border
exit
fi
# Get top-left pixel
topleft=$(convert "$1" -format "%[pixel:s.p{0,0}]" info:)
echo DEBUG: Image has border, border colour is: $topleft
# Decide whether to add border
[ $topleft = "white" ] && addborder=1
[ $topleft = "gray(255)" ] && addborder=1
[ $topleft = "graya(0,0)" ] && addborder=1
[ $topleft = "none" ] && addborder=1
echo DEBUG:addborder: $addborder
if [ $addborder -eq 1 ]; then
echo DEBUG: adding border
convert "$1" -bordercolor none -border 5x5 output.png
fi
其他相关信息和想法......
您可以使用Imageagick的trim
功能修剪任何实心或透明边框,如下所示:
convert input.jpg -trim +repage output.jpg
如果没有固体边框,它什么都不做。 +repage
重置图片周围的画布,因此它不再记得它是更大的一部分。
或者,您可以使用mogrify
mogrify -fuzz 15% -trim +repage *.jpg
fuzz
因子允许边框颜色略有变化,同时还要修剪它。
添加新边框可以同时完成:
convert input.jpg -fuzz 10% -trim +repage -bordercolor white -border 5x5 output.jpg
或者,如果你想做一些更详细的处理,你可以得到左上角的像素,并根据它的值决定你想做什么:
convert input.png -format "%[pixel:s.p{0,0}]" info:
让我们创建一个透明的图像并检查我们得到的内容:
convert -size 10x10 xc:none input.png
convert input.png -format "%[pixel:s.p{0,0}]" info:
graya(0,0)
和白色的:
convert -size 10x10 xc:white input.png
convert input.png -format "%[pixel:s.p{0,0}]" info:
gray(255)
和红色的:
convert -size 10x10 xc:red input.png
convert input.png -format "%[pixel:s.p{0,0}]" info:
red