Изменение размера водяного знака относительно родительского изображения и сохранение сглаживания

Я видел другие ответы, но никто не решает эту проблему, у меня есть этот код

$stamp = imagecreatefrompng('w.png');
$im = imagecreatefromjpeg('image.jpg');
$stw = imagesx($im)/4;
$marge_bottom = 10;
$marge_right = 10;

$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopyresized($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));header("Content-Type: image/jpeg");
imagejpeg($im,NULL,100);

Это работает, но водяной знак (штамп) зазубрен после изменения размеравведите описание изображения здесь

Водяной знак должен выглядеть так:

введите описание изображения здесь

Редактировать:
Вот решение для тех, кто с этой проблемой, заменить imagecopyresized() функция с imagecopyresampled()

imagecopyresampled($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));

1

Решение

Пытаться imagecopyresampled вместо imagecopyresized:

imagecopyresampled($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));

Из руководства:

imagecopyresampled () копирует прямоугольную часть одного изображения в другое изображение, плавно интерполируя значения пикселей, так что, в частности, уменьшение размера изображения все еще сохраняет большую четкость.

3

Другие решения

Я не знаю все тонкости кода, который у вас есть здесь. Тем не менее, я знаю, что любое уменьшенное изображение должно сохранять соотношение сторон, чтобы оно выглядело одинаково при меньшем размере. Если вы используете абсолютные значения для определения ширины и высоты изображений при уменьшении, вероятность появления неровных краев на изображении выше, поскольку изображение не сохраняет свое соотношение сторон при меньших размерах. Поэтому вместо определения абсолютного значения используйте динамическое значение. Так, например, вместо того, чтобы использовать что-то вроде 10px или конвертировать в процент (%).

0

По вопросам рекламы [email protected]