Imagick切出部分图像并使其成为100%透明的alpha

时间:2014-08-12 09:32:46

标签: php image imagemagick imagick

我有2张图片$ main和$ cutout_holes。 $ main是任何图像,而$ cutout_holes是一个黑白图像,我想用作掩码,在$ main中削减一些漏洞。我希望$ cutout_holes的所有白色(#ffffff)像素都能在$ main中切出完全透明的孔。以下是我到目前为止所尝试的内容,但它根本不起作用。

欢迎任何建议

<?
$image = new Imagick();
$image->newImage(100, 100, new ImagickPixel("#222222"));

$image->compositeImage($main, Imagick::COMPOSITE_DEFAULT, 0, 0);
$image->compositeImage($cutout_holes, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);

header('Content-type: image/png');
$image->setImageFormat('png');
echo $image;
?>

1 个答案:

答案 0 :(得分:1)

我相信你想到的复合选项是Screen&amp;相乘,但我也不相信他们会给你预期的结果。通常在ImageMagick's documentation中,蒙版被视为alpha通道值/遮罩(即黑色= 0.0 =不透明,白色= 1.0 =透明。)只需翻转或否定您的$coutout_holes图像,然后应用它作为alpha通道。

<?php
$main = new Imagick('any.png');
$cutout_holes = new Imagick('mask.png');

// If original mask wasn't already negated, do it here.
$cutout_holes->negateImage(FALSE);

// Null any previous alpha states. Same as -alpha off
$main->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
// (and/or) Drop matte state of mask. Same as +matte
$coutout_holes->setImageMatte(FALSE);

// Apply holes mask as the new alpha channel.
$main->compositeImage($cutout_holes, Imagick::COMPOSITE_COPYOPACITY, 0, 0);

Holes cut