2011-06-17 172 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