2017-07-19 109 views
1

我已经做了几乎所有事情,但我面临着一个问题。我在多个位置创建多个水印。这是运行良好,但实际问题是当图像具有良好的分辨率和水印看起来非常小。我想要的任何图像分辨率水印应该是变焦和可见这里是我的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"); 
+0

检查水印和图像的大小,然后添加相同的。您可以针对不同的图像尺寸使用不同的水印图像尺寸。 – informer

+0

图像由用户添加..所以它可以是任何尺寸 –

+0

水印尺寸是143 * 63 @informer –

回答

4

这是一个很大的水印,对于任何图片都有足够的分辨率,因为它是1,000像素的正方形。现在

enter image description here

,如果我们有这样的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 

enter image description here

enter image description here

但是,如果我们有这样一个400×300像小我法师:

enter image description here

当我们应用水印,我们首先将其调整为15%的400,或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 

enter image description here

所以,你需要得到大小安德烈亚斯如何向你示好:

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 
+0

谢谢@Mark Setchell我很高兴你帮我:) –

+0

我的荣幸 - 祝你的项目顺利! –

+0

非常感谢:) –

1

使用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"); 
+1

谢谢克里斯! – Andreas

+0

为什么你乘以高度和宽度? –

+0

获得Mpix。这是描述图片尺寸或相机“质量”的常用方式 – Andreas