How to keep aspect ratio of Image and Watermark in Laravel php

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);
Answer
Solution:
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();
}
Answer
Solution:
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 toaddwatermark
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.
Share solution ↓
Additional Information:
Link To Answer People are also looking for solutions of the problem: script cache:clear returned with error code 255
Didn't find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.
Write quick answer
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.