PHP imagecopy функция изменения размера штампа в зависимости от высоты и ширины основного изображения - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь добавить водяной знак (логотип) к каждому загружаемому изображению на веб-сайт.

Итак, я использовал функцию PHP для imagecopy, чтобы добавить водяной знак (изображение png) к основному изображению (aJPG), но проблема в том, что размер логотипа изменяется в соответствии с размером основного изображения (высота и ширина). Это означает, что если я загружу изображение размером 4000x2000, логотип будет выглядеть примерно как 100x100, а если размер основного изображения будет 1000x500, печать будетбыть больше, чем реальный размер (546x537).

Образцы изображений:

https://crkemlak.com/appimg/199f8486d7d77007771f2f450dffca4d.jpeg
https://crkemlak.com/appimg/d6f9fd02999eced76eac9a6995df904f.jpeg
https://crkemlak.com/img/stamp.png

Я использовал этот код, чтобы добавить водяной знак к изображению:

$im = imagecreatefromjpeg('../appimg/'.$filenamerand);

$originalWidth= imagesx($im);
$originalHeight = imagesy($im);

$stamp = imagecreatefrompng('../img/stamp.png');
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($im, $stamp, ($originalWidth-$sx)/2, ($originalHeight-$sy)/2, 0, 0, imagesx($stamp), imagesy($stamp));

Iнужна ваша помощь, пожалуйста, чтобы решить эту проблему, мне нужно, чтобы водяной знак был в его реальном размере в любом размере основного изображения JPG

Спасибо

1 Ответ

0 голосов
/ 03 сентября 2019

Я использовал imagecopyresized , чтобы водяной знак можно было масштабировать так, чтобы он выглядел одинаково на любом входном изображении независимо от его размера.Возможно, лучшие способы сделать это.Я не уверен, насколько хорошее качество при масштабировании изображений с прозрачным фоном.Вот оно на мерзавец

$watermark = imagecreatefrompng('watermark.png');
$image = imagecreatefromjpeg('main-image.jpg');

$wm_x = imagesx($watermark);
$wm_y = imagesy($watermark);
$img_x = imagesx($image);
$img_y = imagesy($image);

// calculate watermark size
$wm_scale = 19; // set size in relation to image
$wm_w = $img_x/$wm_scale;
$wm_aspect = $wm_y/$wm_x;
$wm_h = (int) ($wm_aspect * $wm_w);

// calculate margin
$margin_scale = 6; // set margin in relation to new watermark size
$margin_right = $wm_w/$margin_scale;
$margin_bottom = $wm_h/$margin_scale;

// calculate watermark destination
$dst_x = $img_x - $wm_w - $margin_right;
$dst_y = $img_y - $wm_h - $margin_bottom;

imagecopyresized ($image, $watermark, $dst_x, $dst_y, 0, 0, $wm_w, $wm_h, $wm_x, $wm_y);

// Output and free memory
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...