2012-03-05 27 views
5

Imaj kullanarak bir görüntünün saydam alanlarını php ile kaldırmaya çalışıyorum. Imagick::trimImageImagick'te kırpma rengi nasıl ayarlanır?

görüntüden arka plan rengi olan kenarlarını çıkarın:

Imagemagick'in trim yöntem sağlar. Imagick, ImageMagick 6.2.9 veya daha yeni sürümüne karşı derlenmişse, bu yöntem kullanılabilir.

Hangi Imagick'in kırpabileceği rengi nasıl ayarlayabilirim?

Aşağıdaki komut dosyası, arka plan rengini griye ayarlar. Ancak, trim, mavi arka plan rengini aşağıda görebileceğiniz gibi kaldırır.

$im = new Imagick("1.png"); 
// Set background color to grey 
$im->setImageBackgroundColor(new ImagickPixel("rgb(213,213,213)")); 
$im->trimImage(0); 
$im->writeImage('2.png'); 

enter image description here

Döşeme renkleri sınırlamak için herhangi bir yolu var mı?

imagick modülü versiyonu => 2.1.1-rc1

+0

Sana bekliyorsanız daha dokümantasyon "arka plan rengi" nin oldukça gevşek bir tanım kullanıyor olabilir şüpheleniyoruz. ImageMagick'in kendiliğinden kırpılması, görüntünün * köşe piksellerinin * renklerini alarak ve arkasından çalışarak arka planı kaldırır. Durumunuzda olan şey kesinlikle bu gibi görünüyor. Bunu onaylamak için, üç renkli örneği [kılavuz] 'dan kullanmayı deneyin (http://www.imagemagick.org/Usage/crop/#trim) - arka arkaya üç katı renk karesi içeren bir görüntü oluşturun süslemeni ve sadece merkez meydanda kaldığını gör. Bu örnekte –

+0

, sonuçta elde edilen görüntü karedir, NICE ... i kare olduğundan emin olun. görüntü yapabilir bir işlev var ... görüntü dikdörtgen ve "kaldır" ya da etrafında bir dikdörtgen görüntü oluşturmak için arka plan, ben kare olmak için KUVVET .... ne – menardmam

cevap

7

Matt Gibsons İpucu doğru çözüme götürdü: http://www.imagemagick.org/Usage/crop/#trim_color

Matt zaten Döşeme yöntem görüntü kesmek için köşe renklerini alır açıklandığı gibi. Belgelere verilen çözüm geçici bir çözümdür: Düzeltme yöntemini çağırmadan önce resmin etrafında bir kenarlık çizerler.

$img = new Imagick("stripes.gif"); 
// Set the color to trim: 
$img->borderImage("#FF0000", 1, 1); 
$img->trimImage(0); 
$img->setImagePage(0, 0, 0, 0); 
$img->writeImage("test.jpg");' 

Demo

+0

Cool, tahminim haklıydı. –

-1

Eğer onaltılık kod olarak arka plan rengini belirterek, yerine bunun için bir ImagickPixel başlatmasını denediniz mi?

$im->setImageBackgroundColor(#D5D5D5); 
+0

Teşekkürler Karl ama sonuç kalır aynısı. – jantimon

+0

setImageBackgroundColor: "Artık parametre olarak rengi temsil eden bir dizeye izin veriyor. Önceki sürümler yalnızca bir ImagickPixel nesnesine izin veriyor." – jantimon

İlgili konular