Я видел другие ответы, но никто не решает эту проблему, у меня есть этот код
$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));
Пытаться imagecopyresampled
вместо imagecopyresized
:
imagecopyresampled($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));
Из руководства:
imagecopyresampled () копирует прямоугольную часть одного изображения в другое изображение, плавно интерполируя значения пикселей, так что, в частности, уменьшение размера изображения все еще сохраняет большую четкость.
Я не знаю все тонкости кода, который у вас есть здесь. Тем не менее, я знаю, что любое уменьшенное изображение должно сохранять соотношение сторон, чтобы оно выглядело одинаково при меньшем размере. Если вы используете абсолютные значения для определения ширины и высоты изображений при уменьшении, вероятность появления неровных краев на изображении выше, поскольку изображение не сохраняет свое соотношение сторон при меньших размерах. Поэтому вместо определения абсолютного значения используйте динамическое значение. Так, например, вместо того, чтобы использовать что-то вроде 10px или конвертировать в процент (%).