任何人都有使用Imagick :: setImageClipMask的任何示例或经验?

时间:2013-01-15 17:19:19

标签: imagick

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

1 个答案:

答案 0 :(得分: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');

A之前和之后:

enter image description here

最好在Photoshop中创建一个遮罩并将其与项目一起存储。您可以像$mask = new \Imagick('mask.png');那样打开面具并直接应用它,而不像我上面那样动态生成蒙版。