Php Imagick圆角使图像半透明

Php Imagick圆角使图像半透明,php,imagemagick,imagick,Php,Imagemagick,Imagick,我正在为我正在制作的网站编写图像脚本,对于其中一种图像模式,我需要裁剪图像并为其制作圆角。这是我现在使用的代码: $img = new Imagick(); $img->readImageBlob($data); $img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1); $canvas = new Imagick(); $canvas->newImage($size[0], $size[1], new Im

我正在为我正在制作的网站编写图像脚本,对于其中一种图像模式,我需要裁剪图像并为其制作圆角。这是我现在使用的代码:

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$canvas = new Imagick();
$canvas->newImage($size[0], $size[1], new ImagickPixel('white'));
$canvas->compositeImage($img, imagick::COMPOSITE_OVER, 0, 0);
$canvas->roundCorners(10, 10);
$canvas->setImageFormat('png');

然而,产生的图像大约是半透明的,如上图所示,除了边缘周围10英寸像素的边界,我假设是由圆角创建的。我尝试了很多不同的方法,包括直接裁剪$img和在其上使用圆角,但结果是没有圆角

我怀疑compositeImage是这出戏里的小偷,但我不能肯定。有人吗

编辑:更正:如果我做裁剪和圆角解决方案,我最终会得到圆角,但它们有黑色背景。这就是我在这里使用的代码。有人发现了错误/解决方案吗

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$img->cropImage($size[0], $size[1], 0, 0);
$img->roundCorners(10, 10);
编辑2: 裁剪和取整分辨率的解决方案是确保它是一个png,因此它具有alpha支持。但是,结果与从原始代码生成的结果相同

编辑3:
在我的部署服务器上尝试了这个脚本,它按照我的要求工作,因此macports附带的imagick/php imagick版本似乎存在一些问题。谢谢你的帮助

你可以告诉imagemagick给你一个alpha背景

$img->setImageAlphaChannel ( imagick::ALPHACHANNEL_TRANSPARENT )
或者在进行任何转换之前,尝试将图像格式显式设置为PNG24


顺序在这里很重要,在暴露背景之前,图像需要一个alpha通道。

当前macports附带的Imagick/php Imagick版本有问题。尚未为我的计算机解决此问题,但脚本在我的部署服务器上按预期工作。

Wow,忽略了我的图像不一定是png的可能性,因此修复了我的版本之间的结果差异。最初的问题仍然存在:(如果你在网页上展示图像,你可以使用CSS来给它们圆角。(是的,如果你使用CSS3Pie,这包括在IE中)当然可以,但我希望脚本能帮我做到这一点,因为我可能想在这些圆角的基础上添加额外的效果,此外,让它正常工作会很有趣:)