当应用旋转失去png与php magickwand和imagemagick的透明度
问题描述:
您好我正在从运行MagickWand 0.1.8和ImageMagick 6.2.9的Windows环境中移植一个脚本,其中透明度与MagickRotateImage一起工作良好。当应用旋转失去png与php magickwand和imagemagick的透明度
新的环境是Linux运行MagickWand 1.0.8与ImageMagick 6.5.4-7和透明度会丢失,它显示黑色作为我的标志图像旋转后的背景。
从我在网上找到的,似乎PixelSetColor($ bg,“无”)不适用于较新的版本,因此黑色。最终,我需要知道用什么来代替PixelSetColor($ bg,“none”)。我只是没有创建图像的背景,所以在这方面挣扎了一下。
首先,我的php运行这个功能,它使得一个从url获得的600x600 PNG图像的本地60x60版本。
function makeThumb($fileContents){
GLOBAL $localImgPath1;
GLOBAL $localImgPath2;
$wand = NewMagickWand();
$lg = MagickReadImageBlob($wand,$fileContents);
$lg_w = MagickGetImageWidth($wand);
$lg_h = MagickGetImageHeight($wand);
$max = max($lg_h,$lg_w);
$scale_factor = 60/$max;
MagickResizeImage($wand,$lg_w*$scale_factor,$lg_h*$scale_factor, MW_GaussianFilter, .7);
MagickWriteImage($wand, $localImgPath1);
if($localImgPath2!="")
MagickWriteImage($wand, $localImgPath2);
$resized_w = MagickGetImageWidth($wand);
$resized_h = MagickGetImageHeight($wand);
DestroyMagickWand($wand);
}
然后,我用这个来读取本地写PNG图像,并将其旋转:
$logo = NewMagickWand();
$bg = NewPixelWand();
PixelSetColor($bg,"none");
MagickReadImage($logo, $localImgPath1);
MagickRotateImage($logo, $bg, $r);
header('Content-Type: image/PNG');
MagickEchoImageBlob($logo);
DestroyPixelWand($bg);
DestroyMagickWand($logo);
我试过的东西,如添加:
$transparent = NewPixelWand("#FFFFFF");
PixelSetAlpha($transparent, 0);
//and then making the rotate call:
MagickRotateImage($logo, $transparent, $r);
还试图加入MagickSetImageAlphaChannel( $ logo,MW_SetAlphaChannel);在旋转步骤之前。看了一些提及这种方法的帖子,但可能这不是使用它的正确方法。不确定。
我在脚本中也有同样的问题,该脚本在图像上绘制带有设置字体的文本字符串。即使在应用旋转之前,黑色也会立即显示,因此希望字体脚本可以使用徽标脚本的相同修正。
任何帮助将不胜感激。谢谢。
答
对于透明背景,您可以选择四个值。依次尝试:
"none", "transparent", "#00000000", or "rgba(0, 0, 0, 0.0)"
答
问题出在ImageMagick 6.5.4-7上。一定是一个越野车版本。升级到6.8.4-10和上面的代码工作正常,PixelSetColor($ bg,“none”)适用于透明度。
谢谢。我尝试了所有4个,依次作为PixelSetColor的值(例如:PixelSetColor($ bg,“rgba(0,0,0,0.0)”);),但旋转时仍显示黑色。 – user1946821 2013-04-11 16:16:26
尝试在调用'PixelSetColor'后添加一个对'MagickSetBackgroundColor'和/或'MagickSetImageBackgroundColor'的调用(例如'MagickSetImageBackgroundColor($ logo,$ bg);' – searlea 2013-04-12 10:44:20
感谢您的持续帮助,目前为止还是不行。每个这些分开:$ logo = NewMagickWand(); $ bg = NewPixelWand(); PixelSetColor($ bg,“none”); \t //遍历所有4个建议值 MagickSetImageBackgroundColor($ logo,$ bg ); MagickReadImage($标志$ localImgPath1); MagickRotateImage($标志,$ BG,$ R); 标题( '内容类型:图像/ PNG'); MagickEchoImageBlob($标志); ...也试图将这些移动到读取图像之后,甚至在旋转图像之后但没有粘贴d。它可能是我在其他代码中最初将png写入磁盘的一个步骤吗? – user1946821 2013-04-12 14:10:39