0

我正在努力让它发挥作用。
$text_layer->setImageClipMask($mask_layer); 我希望 $mask_layer 的所有黑色区域都会擦除 $text_layer 的匹配区域。它没有任何效果。

4

1 回答 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 回答