【问题标题】:How to adjust watermark according to image?如何根据图像调整水印?
【发布时间】:2017-12-24 06:04:14
【问题描述】:

我几乎做了所有事情,但我面临一个问题。我在多个位置创建多个水印。这运行良好,但实际上问题是图像具有良好的分辨率并且水印看起来非常小。我想要任何图像分辨率水印应该是缩放和可见的,这是我的 exec 函数,我正在使用 laravel 框架,我正在使用 imagick 库

$path = storage_path('app/images/TestImages/');
$mediumFileName = $path.str_random(4)."medium".str_random(4).".".$ext;
$watermarkImage = storage_path('watermark.png');
$saveWatermark = $path."image_watermark.jpg";
exec("convert $mediumFileName \( $watermarkImage -write MPR:wm \) \
-define compose:args=30,100 -compose dissolve            \
      -gravity NorthWest -geometry +3+3 -composite      \
MPR:wm -gravity NorthEast -geometry +3+3 -composite      \
MPR:wm -gravity SouthEast -geometry +3+3 -composite      \
MPR:wm -gravity Center -geometry +3+3 -composite      \
MPR:wm -gravity SouthWest -geometry +3+3 -composite $saveWatermark");

【问题讨论】:

  • 在添加之前检查水印和图像尺寸。您可以为不同的图像尺寸使用不同的水印图像尺寸。
  • 图片由用户添加..所以它可以是任何大小
  • 水印尺寸为143*63 @informer
  • 是的,然后你检查图像大小php.net/manual/en/function.getimagesize.php
  • 那么之后我该怎么办?

标签: php laravel imagemagick imagick imagemagick-convert


【解决方案1】:

这是一个大水印,1000 像素正方形的任何图片都具有足够的分辨率。

现在,如果我们有这样一个 1000x800 像素的图像,我们可以在合成之前将水印的大小调整为 15%(1000 的 15% 是代码中的 150):

convert image.jpg \( watermark.png -resize 150x -write MPR:wm \) \
          -gravity northwest -geometry +10+10 -composite         \
   MPR:wm -gravity northeast -geometry +10+10 -composite         \
   MPR:wm -gravity southwest -geometry +10+10 -composite         \
   MPR:wm -gravity southeast -geometry +10+10 -composite result.png

但是,如果我们有一个像这个 400x300 图像这样的小图像:

当我们应用水印时,我们首先将其调整为 400 的 15%,即 60:

convert image.jpg \( watermark.png -resize 60x -write MPR:wm \) \
          -gravity northwest -geometry +10+10 -composite         \
   MPR:wm -gravity northeast -geometry +10+10 -composite         \
   MPR:wm -gravity southwest -geometry +10+10 -composite         \
   MPR:wm -gravity southeast -geometry +10+10 -composite result.png

因此,您需要了解 Andreas 向您展示的图片大小:

list($width, $height, $type, $attr) = getimagesize($mediumFileName);

然后将其乘以 0.15(即 15%)并在您的 -resize 参数中使用它。


如果上面括号中的 “旁处理” 令人不安或令人困惑,您可以通过先单独加载水印并调整其大小,将其放入 MPR 并然后加载主图像并覆盖 MPR 四次。它只是一种不同的,也许更简单的语法:

convert watermark.png -resize 60x -write MPR:wm +delete image.jpg \
   MPR:wm -gravity northwest -geometry +10+10 -composite          \
   MPR:wm -gravity northeast -geometry +10+10 -composite          \
   MPR:wm -gravity southwest -geometry +10+10 -composite          \
   MPR:wm -gravity southeast -geometry +10+10 -composite result.png

【讨论】:

  • 谢谢@Mark Setchell,我很高兴你能帮到我:)
【解决方案2】:

使用 imagesize 并获取图像大小。
选择正确大小的水印并将其添加到图片中。

$path = storage_path('app/images/TestImages/');
$mediumFileName =  $path.str_random(4)."medium".str_random(4).".".$ext;
$watermarkImage = storage_path('watermark.png');

list($width, $height, $type, $attr) = getimagesize($mediumFileName);

if ($height * $width < some Mpx){
    $watermarkImage = storage_path('watermarkSMALL.png');
} elseif($height*$width >some larger Mpx)
    $watermarkImage = storage_path('watermarkLARGE.png');
}

exec("convert 
$mediumFileName \( 
$watermarkImage -write     MPR:wm \) \
-define compose:args=30,100 -compose dissolve            \
  -gravity NorthWest -geometry +3+3 -composite      \
MPR:wm -gravity NorthEast -geometry +3+3 -composite      \
MPR:wm -gravity SouthEast -geometry +3+3 -composite      \
MPR:wm -gravity Center -geometry +3+3 -composite      \
MPR:wm -gravity SouthWest -geometry +3+3 -composite $saveWatermark");

【讨论】:

  • 为什么要乘以高度和宽度?
  • 获取 Mpix。这是描述图片大小或相机“质量”的常用方式
  • 这不是在 if 条件中定义静态 Mpx 的好方法
  • 定义静态 Mpix?您说添加图像的是用户。那怎么可能是静态的呢?
  • 我在说这个
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多