如何在Laravel PHP中保持图像和水印的长宽比

3
我试图向任意分辨率大于800x100的图像中添加一个800x100像素的水印。例如:801x110、1200x1000、1300x200、1920x1080、4000x2010等。
我想保持水印和图像的宽高比为2:50。例如,如果图像宽度为1000像素,则水印应该占据图像的20像素(1000/50)。
以下是我的函数:
在helper.php中。
use Image;
//calling from Controller

public static function addwatermark ($name) {

  $thumbnail = Image::make($name);
  $imageWidth = $thumbnail->width();
  $watermarkWidth = '800px';

  $watermarkSource = 'public/img/watermark/watermark.png';
  $thumbnail->insert($watermarkSource, 'bottom-left', 0, 0);
  $thumbnail->save($name)->destroy();
}
 

ImageController.php 文件中。
 $folder = 'public/folder/';
 $large = 'myfile.jpeg';
 Helper::addwatermark($folder.$large);

1
您可以使用if语句与图像宽度配合,并根据需要应用几个调整大小的水印图像。 - Amit
@Amit 比例仍然不同。有些图像可能仍然带有更大的水印外观。 - Anonymous Girl
2个回答

3
我认为这对您有用:
public static function addwatermark ($name) {
{
    $thumbnail = Image::make($name);
    $imageWidth = $thumbnail->width();
    $watermarkSource =  Image::make(public_path('img/watermark/watermark.png'));

    $watermarkSize = round(20 * $imageWidth / 50);
    $watermarkSource->resize($watermarkSize, null, function ($constraint) {
        $constraint->aspectRatio();
    });

    $thumbnail->insert($watermarkSource, 'bottom-left', 0, 0);
    $thumbnail->save($name)->destroy();
}

1
@AnonymousGirl,你是在使用我提供的$watermarkSource还是之前的版本? - Mohsen Nazari
抱歉!它起作用了。但我会在不同的图像上进行测试并让您知道!!! - Anonymous Girl
原始图像被加水印后变为264KB,而原本大小为2.05MB。 - Anonymous Girl
有什么解决方案吗? - Anonymous Girl
1
@AnonymousGirl 在你的Intervention配置中使用imagick而不是gd。你可以在这里找到如何操作:http://image.intervention.io/getting_started/installation。 - Mohsen Nazari

0
如果我理解你的意思: 水印的宽高比为8:1(水印的宽度是其高度的8倍),根据宽高比2:501:25,图像的宽度比水印的宽度大25倍。 例如:如果图像的宽度为1000像素,则水印的宽度应为40像素。 因此,我们还将图像的宽度传递给helper.php中的addwatermark函数。
use Image;

public static function addwatermark ($name, $imageWidth) {
  $watermarkWidth = $imageWidth / 25;
  $watermarkHeight = $watermarkWidth / 8;
  $watermarkSource = 'public/img/watermark/watermark.png';
  $watermark= Image::make($name)->resize($watermarkWidth, $watermarkHeight)->insert($watermarkSource, 'bottom-left', 0, 0);
  $watermark->save($name)->destroy();
}

如果我理解有误,请告诉我,谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接