图像圆角使图像半透明



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

$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像素的边界,我假设是由roundCorner创建的。我尝试了很多不同的方法,包括直接裁剪$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版本似乎有一些问题。谢谢你的帮助!

您可以告诉imagemagik使用为您提供alpha背景

$img->setImageAlphaChannel ( imagick::ALPHACHANNEL_TRANSPARENT )

或者在进行任何转换之前,尝试将图像格式明确地设置为PNG24。

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

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

最新更新