【问题标题】:How to create a tiled watermark using Imagick如何使用 Imagick 创建平铺水印
【发布时间】:2021-11-26 06:37:23
【问题描述】:

我正在尝试使用 PHP Imagick 创建平铺水印以应用于图像。

基本上,我正在尝试使用 Imagick 而不是 CLI 复制以下命令:

exec('composite -dissolve 45 -tile ' . $watermarkFilename . ' ' . $inputFilename . ' ' . $outputFilename);
$image = new \Imagick($inputFilename);
$watermark = new \Imagick();
$watermark->newPseudoImage(
    $image->getImageHeight(),
    $image->getImageWidth(),
    "tile:$watermarkFilename"
);
$image->setImageArtifact('compose:args', '45');
$image->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, 0, 0);
$image->writeImage($outputFilename);

这种工作,除了我从 png 中丢失了 alpha 通道。

我注意到我可以将 VirtualPixelMethod 设置为 TILE,但我不知道如何重新采样水印以使其平铺。

$watermark->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TILE);

有人知道如何创建平铺图像吗?

【问题讨论】:

    标签: php imagick


    【解决方案1】:

    我发现我可以使用Imagick::textureImage() 创建平铺版水印:

    $image = new \Imagick($inputFilename);
    $tile = new \Imagick();
    $tile->newImage($image->getImageWidth(), $image->getImageHeight(), 'transparent', 'png');
    $watermark = $tile->textureImage(new \Imagick($watermarkFilename));
    $image->setImageArtifact('compose:args', '45');
    $image->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, 0, 0);
    $image->writeImage($outputFilename);
    

    这解决了问题,但没有解释Imagick::VIRTUALPIXELMETHOD_TILE 是什么或如何使用它来实现相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      相关资源
      最近更新 更多