2014-01-07 3 views
1

Я хочу сделать часть (или фактически несколько частей) изображения прозрачным с помощью IMagick, чтобы я мог использовать его как маску на другом изображении. Я не могу понять, как это сделать простым способом.Сделайте часть изображения прозрачной с IMagick/ImageMagick

Так сказать, что мой исходный образ представлен, как показано ниже, где Х представляет собой любой цвет:

XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 

Тогда я хочу, чтобы иметь возможность сделать некоторые прямоугольные области прозрачным (так она заканчивается немного как punch- карта):

XXXXXXXXXXXXX 
X XXXXXXXXXX 
X XXXX XXXX 
XXXXXXX XXXX 
XXXXXXXXXXXXX 

Кто-нибудь знает о хорошем способе этого сделать? Благодарю.

+0

Would что-то вроде [это] (http://stackoverflow.com/questions/1741488/using-a-transparent-png-as-a-clip-mask) работать для вас? – PinnyM

+1

Возможный дубликат [php imagick, как сделать область прозрачной] (http://stackoverflow.com/questions/12349549/php-imagick-how-to-make-an-area-transparent) – AndreKR

ответ

1

Выяснил это.

//Open your image and get its dimensions 
$image = new Imagick('image.png'); 
$height = $image->getImageHeight(); 
$width = $image->getImageWidth(); 

//Create a new transparent image of the same size 
$mask = new Imagick(); 
$mask->newImage($width, $height, new ImagickPixel('none')); 
$mask->setImageFormat('png'); 

//Draw onto the new image the areas you want to be transparent in the original 
$draw = new ImagickDraw(); 
$draw->setFillColor('black'); 
$draw->rectangle(10,10,100,100); 
$mask->drawImage($draw); 

//Composite the images using Imagick::COMPOSITE_DSTOUT 
$image->compositeImage($mask, Imagick::COMPOSITE_DSTOUT, 0, 0, Imagick::CHANNEL_ALPHA); 
+0

спасибо, это было просто что мне нужно. –

+0

Не работает для меня «черная» часть маски, как прозрачная, не привязанная к основному изображению. – Suge

Смежные вопросы