2016-03-21 24 views
1

İki grafik dosyasına sahibim.İki grafik dosyası nasıl birleştirilir? (PHP, Imagick)

ilk görüntü - JPG biçiminde

İkinci dosya bir arka plan görüntüsü - beyaz dolu merkezinde figür ile PNG dosyası, bir yol üzerinde siyah kenarlıklı. Şeffaf PNG dosyasının ana arka planı.

Soru: İki dosya nasıl saydamlık ile birleştirilir (bkz. Resim örneği)? İlk dosyanın arka planı, ikinci dosyadaki şeklin içine yerleştirilmelidir.

Şema:

example images

Görüntüler:

PNG dosyası - profiles.in.ua/tmp/sample2.jpg

JPG dosyası - profiles.in.ua/tmp/sample1.png

PHP kodu:

$mask = new Imagick(realpath('mask.png')); 
$pattern = new Imagick(realpath('pattern.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 
$pattern->compositeImage($mask, Imagick::COMPOSITE_ATOP, 0, 0); 
header("Content-Type: image/png"); 
echo $pattern->getImageBlob(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

Yönetici spaces.ru? Kod snipet'iniz için etiket kodunu kullanabilirsiniz? – Naumov

cevap

2

maske görüntü varsayarsak her zaman münhasıran (deseni ile yazılır olmalıdır) beyaz pikseller, siyah piksel (deseni üzerine olmalıdır) ve saydam piksellerin (ki kalmalıdır yapılır şeffaf), bu efekti, maskedeki saydam olmayan piksellere göre desen birleştirerek ve ardından sonucu maskeyle koyulaştırarak alabilirsiniz.

Sağladığınız PNG dosyasının belirtildiği gibi saydam bir arka planı yoktu; bunun yerine beyaz ve gri yumurtadan çıkmıştı. Bu kodun çalışmasından önce şeffaf bir arka plan eklemek için önce onu düzenlemek zorunda kaldım.

$mask = new Imagick(realpath('sample1.png')); 
$pattern = new Imagick(realpath('sample2.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 

$image = clone($mask); 
$image->compositeImage($pattern, Imagick::COMPOSITE_IN, 0, 0); 
$image->compositeImage($mask, Imagick::COMPOSITE_DARKEN, 0, 0); 

header("Content-Type: image/png"); 
echo $image; 

$image->destroy(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

Çalışıyor! Çok teşekkür ederim! Gerçekten yardım ettin! :) – Nikolay

0

Kodunuzun sonunu düzeltmeniz gerekiyor. Sonuna kadar bütün iyiler.

$base->writeImage('output.png'); 
header("Content-Type: image/png"); 
echo $base; 

Bana bir güncelleme :)

+0

Çalışıyor! Çok teşekkür ederim! Gerçekten yardım ettin! :) – Nikolay

+0

Lütfen oy verin! –

İlgili konular