应用旋转时,使用php magickwand和imagemagick丢失png的透明度

时间:2013-04-09 15:49:40

标签: php imagemagick magickwand

您好我正在运行MagickWand 0.1.8和ImageMagick 6.2.9的Windows环境中移植脚本,其中透明度与MagickRotateImage一起正常工作。

新环境是Linux运行MagickWand 1.0.8与ImageMagick 6.5.4-7并且透明度丢失,一旦我的徽标图像旋转,它就会显示黑色作为背景。

从我在网上找到的,似乎PixelSetColor($ bg,“none”)不适用于较新的版本,因此黑色。最终,我需要知道用什么代替PixelSetColor($ bg,“none”)。我只是没有图像创作的背景,所以有点挣扎。

首先我的php运行此功能,从网址获取本地60x60版本的600x600 png图像。

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);在旋转步骤之前。看到一些提到该方法的帖子,但可能这不是使用它的正确方法。不确定。

我在脚本中也遇到了同样的问题,该脚本将带有设置字体的文本字符串绘制到图像上。即使在应用旋转之前黑色立即显示在那里,因此希望字体脚本可以使用徽标脚本的相同修复。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

您可以选择透明背景的四个值。依次尝试:

"none", "transparent", "#00000000", or "rgba(0, 0, 0, 0.0)"

答案 1 :(得分:0)

问题在于ImageMagick 6.5.4-7。肯定是一个错误的发布。升级到6.8.4-10及以上代码工作正常,PixelSetColor($ bg,“none”)适用于透明度。