当应用旋转失去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)" 
+0

谢谢。我尝试了所有4个,依次作为PixelSetColor的值(例如:PixelSetColor($ bg,“rgba(0,0,0,0.0)”);),但旋转时仍显示黑色。 – user1946821 2013-04-11 16:16:26

+0

尝试在调用'PixelSetColor'后添加一个对'MagickSetBackgroundColor'和/或'MagickSetImageBackgroundColor'的调用(例如'MagickSetImageBackgroundColor($ logo,$ bg);' – searlea 2013-04-12 10:44:20

+0

感谢您的持续帮助,目前为止还是不行。每个这些分开:$ 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

问题出在ImageMagick 6.5.4-7上。一定是一个越野车版本。升级到6.8.4-10和上面的代码工作正常,PixelSetColor($ bg,“none”)适用于透明度。