imagemagick(旧版)居中、调整大小、移动、裁剪水印

问题描述 投票:0回答:2

所以我有imagemagick版本:ImageMagick 6.9.11-60

为了使过程更容易,我创建了一个现成的 png 文件,该文件具有直角重复图案,并且具有始终大于输入图像以覆盖它的正确透明度。不幸的是我无法让它发挥作用。我描述了我想要实现的目标

1. 我有一个输入图像(image1)和一个水印(watermark.png)。水印是一个现成的网格,带有具有适当透明度的重复水印。它的长和宽总是大于image1的长和宽 enter image description here

2. 现在我想将此水印应用到image1的中心和watermark1的中心 enter image description here

3. 下一步是能够将水印的大小缩小,例如缩小 20%。 image1 的尺寸无法更改。缩小尺寸后水印仍应居中。 enter image description here

4.下一步是将水印移动一定数量的像素x和y enter image description here

5. 最后一步是剪掉水印中不需要的部分,以便仅保留带有水印的输入图像。 enter image description here

理想情况下,可以在一个查询中完成所有这些操作,我可以提供以下参数:

  • 输入图片
  • 水印图片
  • 输出图像
  • 减少水印百分之多少
  • 水印移动 X 和 Y 多少像素

[编辑] 关于这个问题,我附加了一个示例水印和一张要应用水印的图像。 wtarmark 已准备好适当的透明度和阴影。我将应用水印的图像具有不同的尺寸和不同的方面,但它们始终适合水印网格,如上图所示 好的 enter image description here

enter image description here

php imagemagick
2个回答
1
投票

我设法拼凑出一些或多或少能完成工作的东西。它从服务器读取图像文件,并将输出存储在服务器上。看起来像这样:

function applyWatermark(string $imagePath,
                        string $watermarkPath,
                        string $outputPath,
                        int $reductionInPercent,
                        int $offsetX,
                        int $offsetY): void
{
    // get both image and watermark
    $image     = new Imagick($imagePath);
    $watermark = new Imagick($watermarkPath);
    // resize the watermark
    $newWidth  = 0.01 * (100 - $reductionInPercent) * $watermark->getImageWidth();
    $newHeight = 0.01 * (100 - $reductionInPercent) * $watermark->getImageHeight();
    $watermark->resizeImage($newWidth, $newHeight, Imagick::FILTER_QUADRATIC, 1);
    // center the offsets
    $offsetX  -= 0.5 * ($watermark->getImageWidth()  - $image->getImageWidth());
    $offsetY  -= 0.5 * ($watermark->getImageHeight() - $image->getImageHeight());
    // composite watermark into image
    $image->compositeImage($watermark, Imagick::COMPOSITE_OVER, $offsetX, $offsetY);
    // generate output
    $image->writeImage($outputPath);
}

我认为你可以在文档中查找各种 Imagick 方法的确切用途,但我添加了一些注释来澄清它们。

所有路径都必须是绝对路径,其他三个设置都是整数。用例可能是:

applyWatermark(__DIR__ . '/dog.jpg',
               __DIR__ . '/watermark.png',
               __DIR__ . '/output.jpg',
               10.0,
               rand(-25, 25),
               rand(-25, 25));

此处图像和输出存储在与 PHP 脚本相同的位置。水印减少 10%,偏移 x 和 y 在任一方向随机移动最多 25 个像素。结果如下所示:

enter image description here


0
投票

这是 Imagemagick 中的一个简短方法,使用 - Distortion SRT 和计算视口来进行裁剪。

X=-50
Y=-50
magick \
watermark.png image.jpg \
-set option:distort:viewport "%[fx:v.w]x%[fx:v.h]+%[fx:0.5*(u.w-v.w)+$X]+%[fx:0.5*(u.h-v.h)+$Y]" \
-geometry +$X+$Y -gravity center -compose dstover -composite +repage \
-virtual-pixel White -distort SRT 0 +repage x.png

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.