我正在努力让它发挥作用。
$text_layer->setImageClipMask($mask_layer); 我希望 $mask_layer 的所有黑色区域都会擦除 $text_layer 的匹配区域。它没有任何效果。
问问题
380 次
1 回答
1
该compositeImage
方法可以达到您想要的效果。在 PHP 中,您可以执行以下操作:
<?php
// Open image
$image = new \Imagick('image.png');
// Create, draw mask
$mask = new \Imagick();
$mask->newImage($image->getImageWidth(), $image->getImageHeight(), 'transparent', 'png');
$mask_shape = new \ImagickDraw();
$mask_shape->setStrokeAntialias(true);
$mask_shape->setFillColor('white');
$mask_shape->setStrokeColor('white');
$mask_shape->circle($image_width/2, $image_height/2, 0, $image_height/2);
$mask->drawImage($mask_shape);
// Apply mask to image
$image->compositeImage($mask, \Imagick::COMPOSITE_COPYOPACITY, 0, 0, \Imagick::CHANNEL_ALL);
// Save newly-"masked" image
$image->writeImage('image.png');
之前和之后:
最好是在 Photoshop 中创建一个蒙版并将其存储在您的项目中。您可以像这样打开您的遮罩$mask = new \Imagick('mask.png');
并直接应用它,而无需像我上面那样动态生成遮罩。
于 2013-09-18T20:22:39.057 回答