2011-06-17 85 views
0

我正在为我正在制作的网站编写图像脚本,以及我需要的图像模式之一来裁剪图像并为其设置圆角。这是我使用现在的代码:Imagick roundCorners使图像半透明

$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'); 

Resulting image

然而,所得到的图像是大约半透明的,如上述所示,除了围绕边缘10上下的像素边界,创建由roundCorner我假设。我尝试了很多不同的方式来做到这一点,包括直接裁剪$ img和roundCorner,但结果是没有圆角。

我怀疑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,所以这是具有α-支持。但是,结果与我的原始代码生成的结果相同。

编辑3: 在我的部署服务器上尝试了这个脚本,它的工作原理与我想要的一样,所以似乎与macports附带的imagick/php-imagick版本存在一些问题。感谢所有的帮助!

+0

如果您要在网页上展示图片,您可以使用CSS为它们指定圆角。 (是的,这包括在IE中,如果你使用CSS3Pie) – Spudley 2011-06-17 17:52:07

+0

当然我可以,但我希望脚本为我做这件事,因为我可能想根据那些圆角添加额外效果,除此之外, d很有趣,让它正常工作:) – Mikau 2011-06-17 19:06:26

回答

0

这是Imagick/php-imagick版本随当前macports附带的问题。还没有解决它为我的电脑,但该脚本在我的部署服务器上按预期工作。

0

你可以告诉ImageMagick的给你一个alpha背景

$img->setImageAlphaChannel (imagick::ALPHACHANNEL_TRANSPARENT) 

或尝试明确做任何变换之前设置的图像格式PNG24。

订单在这里很重要,图片需要一个alpha通道之前你公开背景。

+0

哇,错过了我的图像不一定是PNG的可能性,以便修复我的版本之间的结果差异。原来的问题仍然是你:( – Mikau 2011-06-17 17:46:51