3

I am trying to add Watermark of 800x100px to Images which can have any resolution greater than 800x100, i.e. 801x110, 1200x1000, 1300x200, 1920x1080, 4000x2010, etc.

I want to keep the aspect ratio of Watermark and image to 2:50. i.e., if image has 1000px width, then watarmark over image should occupy 20px(1000/50).

Here is my Function :

in 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();
}
 

in ImageController.php

 $folder = 'public/folder/';
 $large = 'myfile.jpeg';
 Helper::addwatermark($folder.$large);
miken32
  • 42,008
  • 16
  • 111
  • 154
Anonymous Girl
  • 582
  • 8
  • 22

2 Answers2

3

I think this should work for you:

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();
}
Mohsen Nazari
  • 1,281
  • 1
  • 3
  • 13
0

If I understand what you mean : aspect ratio of watermark is 8:1 ( width of watermark is 8 times larger of its height ) and based on aspect ratio 2:50 or 1:25, width of the image is 25 times larger than width of watermark. for example: if image has 1000px width, the watermark width, should be 40px. so we also pass the width of image to addwatermark function in helper.php.

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();
}

if I get it wrong, please let me know, thank you.

Ramin eghbalian
  • 2,348
  • 1
  • 16
  • 36