Isr*_*ael 110 png imagemagick alpha-transparency
假设您有任何图像(PNG或JPG).此图像具有白色背景,我需要使此背景透明.
我试过这些例子:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
但没有理想的结果.
我该怎么做?
重要说明:使用convert
命令行.
小智 132
我在Ubuntu 12.04上使用ImageMagick 6.6.9-7.
对我有用的是:
convert test.png -transparent white transparent.png
Run Code Online (Sandbox Code Playgroud)
这将test.png中的所有白色变为透明.
小智 74
我有同样的问题.我必须使用ImageMagick从jpg/png图像格式中删除白色背景.
对我有用的是:
1)将图像格式转换为png: convert input.jpg input.png
2) convert input.png -fuzz 2% -transparent white output.png
hac*_*rb9 34
color=$( convert filename.png -format "%[pixel:p{0,0}]" info:- )
convert filename.png -alpha off -bordercolor $color -border 1 \
\( +clone -fuzz 30% -fill none -floodfill +0+0 $color \
-alpha extract -geometry 200% -blur 0x0.5 \
-morphology erode square:1 -geometry 50% \) \
-compose CopyOpacity -composite -shave 1 outputfilename.png
Run Code Online (Sandbox Code Playgroud)
这比之前给出的简单答案要长一些,但它提供了更好的结果:(1)由于抗锯齿α,质量优越,(2)只有背景被移除而不是单一颜色.("背景"定义为与左上角像素大致相同的颜色,使用图片边缘的填充.)
此外,alpha通道也被半个像素侵蚀以避免光晕.当然,ImageMagick的形态学操作不会(但是?)在亚像素级别工作,所以你可以看到我在侵蚀之前将alpha通道炸成200%.
以下是在ImageMagick徽标上运行时,简单方法("-fuzz 2%-transparent white")与我的解决方案的比较 .我将两个透明图像压平成马鞍棕色背景,使差异明显(点击原件).
注意向导的胡子在简单的方法中是如何消失的.比较向导的边缘,看看抗锯齿alpha有助于图形平滑地融入背景.
当然,我完全承认有时您可能希望使用更简单的解决方案.(例如:这很容易记住,如果你转换为GIF,你无论如何都只能限制在1位alpha.)
由于您不太可能想要重复输入此命令,我建议将其包装在脚本中.您可以从github下载BASH shell脚本,它执行我建议的解决方案.它可以在目录中的多个文件上运行,并包含有用的注释,以防您想要调整内容.
顺便说一下,ImageMagick实际上附带了一个名为"bg_removal"的脚本 ,它以与我的解决方案类似的方式使用floodfill.但是,结果不是很好,因为它仍然使用1位alpha.此外,bg_removal脚本运行速度较慢,使用起来有点棘手(它要求您指定两个不同的模糊值).这是bg_removal输出的一个例子.
Ric*_*ald 27
这对我有用:
convert original.png -fuzz 10% -transparent white transparent.png
Run Code Online (Sandbox Code Playgroud)
其中模糊%越小,越接近真白色或相反,越大%,越白变化越透明
San*_*nda 12
您可以使用此选项使背景透明
convert test.png -background rgba(0,0,0,0) test1.png
Run Code Online (Sandbox Code Playgroud)
以上给出了完美的透明背景
如果你想控制透明度,你可以使用 rgba。其中 a 是阿尔法。0 表示透明,1 表示不透明。确保最终输出文件必须具有 .png 扩展名以确保透明度。
convert
test.png
-channel rgba
-matte
-fuzz 40%
-fill "rgba(255,255,255,0.5)"
-opaque "rgb(255,255,255)"
semi_transparent.png
Run Code Online (Sandbox Code Playgroud)
使用ImageMagick,这与hackerb9代码和结果非常相似,但是命令行更简单一些.它确实假设左上角的像素是背景颜色.我只是用透明度填充背景,然后选择alpha通道并模糊它并使用-level 50x100%移除一半模糊区域.然后转回所有通道并将其压平成棕色.-blur 0x1 -level 50x100%用于对alpha通道透明度的边界进行抗锯齿处理.您可以调整模糊值,模糊量和-level 50%值来更改抗锯齿的程度.
convert logo: -fuzz 25% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x1 -level 50x100% +channel -background saddlebrown -flatten result.jpg
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102863 次 |
最近记录: |