嗨,我正在从运行 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 运行此函数,该函数生成从 url 获取的本地 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); 在旋转步骤之前。看到一些帖子提到该方法,但可能这不是使用它的正确方法。没有把握。
在将具有设置字体的文本字符串绘制到图像上的脚本中,我也遇到了同样的问题。即使在应用旋转之前,黑色也会立即显示在那里,因此希望字体脚本可以使用对徽标脚本的相同修复。
任何帮助将不胜感激。谢谢。