Imagemagick 旋转透明图像上不需要的黑色背景
Posted
技术标签:
【中文标题】Imagemagick 旋转透明图像上不需要的黑色背景【英文标题】:Imagemagick unwanted black background on rotated transparent images 【发布时间】:2012-02-14 12:36:50 【问题描述】:我有一个网站,可以生成以不同角度堆叠在一起的类似宝丽来的图像。 到目前为止一切正常,但现在我的透明 .png 周围开始出现黑色背景。 你可以看到问题here。上一张相册里的图都乱了。
我正在使用 imagemagick (6.5.4.7-3.fc12)。
我的命令看起来像这样:
第一个包含在 foreach 中并生成一堆以不同角度旋转的 pngconvert '$sf' -auto-orient -thumbnail 120x120 -gravity center -bordercolor snow -background black -polaroid $angle $i.png
第二个命令获取先前生成的图像并将它们堆叠在一起convert '*.png' -background transparent -alpha on -gravity center -layers merge -extent 190x190 +repage -thumbnail 115x115 -gravity center -extent 120x120 'result.png'
就我的调试而言,黑色背景已经存在于使用第一个命令生成的图像中,并且它们仅在我旋转图像时出现。如果我只使用-polaroid 0
而不是+polaroid
,那么生成的图像就可以了。
我的猜测是问题不在于代码本身,而在于 ImageMagick 或其他东西在我的服务器上升级了,这导致了整个混乱。
我还尝试了各种设置 -alpha
的组合以及我在 imagemagick 文档中可以找到的所有其他内容,这些组合甚至与透明度略有相关,但似乎没有任何效果。
【问题讨论】:
【参考方案1】:经过各种测试,我终于得出结论,问题不在于我的convert
命令。
我的问题的解决方案是重新安装/更新 ImageMagick。
【讨论】:
【参考方案2】://去除不需要的黑/白背景,使其成为透明背景。
ImageInfo info1 = new ImageInfo(
"/opt/apache-tomcat-6.0.18/webapps/newcpclient_branch/upload/sample/ATT00003.jpg");
MagickImage blankImage = new MagickImage(info1);
**blankImage.setBackgroundColor(PixelPacket.queryColorDatabase("#FFFF8800"));**
blankImage = blankImage.rotateImage(250.0);
blankImage.setFileName("/opt/apache-tomcat-6.0.18/webapps/newcpclient_branch/upload/sample/transparent.png");
blankImage.writeImage(info1);
【讨论】:
【参考方案3】:您在第一行中将 -background 设置为“黑色”。这意味着您不会获得透明度。如果你把它设置为'none',它会起作用吗?
编辑:
import os
import random as ra
for i in range(10):
image = 'convert C:/image.png -auto-orient -thumbnail 120x120 -gravity center -bordercolor snow -background none -polaroid '+str(ra.uniform(0,360))+' C:/test/image_polaroid_'+str(i)+'.png'
os.system(image)
image = 'convert -size 500x500 xc:transparent C:/test/result.png'
os.system(image)
for i in range(10):
image = 'composite -gravity center C:/test/image_polaroid_'+str(i)+'.png C:/test/result.png C:/test/result.png'
os.system(image)
编辑 2:
import os
import random as ra
for i in range(10):
image = 'convert C:/image.png -background none -polaroid 0 C:/test/image_polaroid_'+str(i)+'.png'
os.system(image)
image = 'mogrify -rotate '+str(ra.randint(0,360))+' -background none C:/test/image_polaroid_'+str(i)+'.png'
os.system(image)
【讨论】:
背景(据我所知)是为宝丽来阴影设置的……但我已经尝试将其设置为“无”和“透明”以确保得到相同的结果。我所做的任何更改似乎都对其没有任何影响。 @JoeBlack 如果您在第一行添加“-alpha on”,它也不起作用? '-alpha on' 也无济于事,'-alpha set' 也无济于事,就像其他 -alpha 设置都没有一样(已经全部尝试过)。 @JoeBlack 你能帮我一个忙,试试我编辑的答案中的代码,看看这是否适合你?它适用于 python,因此您必须对其进行一些调整。 好的,经过一番思考,我设法尝试了您的代码,但结果是一个空白(完全透明)的 png。我也将继续尝试其他一些变化。以上是关于Imagemagick 旋转透明图像上不需要的黑色背景的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?