Создание прозрачных изображений PNG в PHP с помощью GD оставляет размытые края

У меня есть прозрачный логотип в файле PNG. Я пытаюсь создать прозрачное изображение коробки, которое будет фоном для логотипа. Таким образом, окончательное изображение будет объединением прозрачного png и прозрачного логотипа из файла, созданного программным способом. Код, который я использую, работает, однако результаты показывают логотип с нечеткими черными краями. Любые идеи о том, как получить более четкое изображение?

Вот мой код:

$source=imagecreatefrompng($logoFile);
imagealphablending($source, false);
imagesavealpha($source, true);
$newImage = imagecreatetruecolor(450,280);
$black = imagecolorallocate($newImage, 0, 0, 0);
imagecolortransparent($newImage, $black);
imagecopyresampled($newImage,$source,0,0,$x,$y,450,280,$width,$height);
imagepng($newImage,$imageDirectory,0);
imagedestroy($newImage);

отредактированный
Извините, я думаю, мне следовало быть более ясным. Файл изображения, который поступает из поля формы загрузки файла. И большинство файлов являются логотипами организации. Некоторые файлы .png содержат альфа-канал прозрачности (они не полностью прозрачны). Причина, по которой я должен воссоздать это, потому что я также использую cropper.js, Это инструмент, который позволяет вам увеличивать или обрезать загружаемый файл, и мне нужно, чтобы конечный файл был 450×280 независимо от того, насколько большим или маленьким был загруженный файл. Так что в моем коде, $x, $y, $width, $height отправляются cropper.js после того, как пользователь манипулирует исходным изображением.

Как я уже сказал, манипулирование изображением работает правильно. Единственная проблема заключается в том, что когда пользователь отправляет png с прозрачностью, логотип становится очень размытым, с черными краями. Когда я меняю черный цвет на другой $black = imagecolorallocate($newImage, 0, 0, 0); Я теряю всю прозрачность.

Вот пример файла ввода и вывода. Слева — исходное изображение, справа — вывод. Вывод этого тестового изображения не так плох, как реальные изображения. На реальных изображениях гораздо больше размытости.

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

-2

Решение

Я нашел проблему. Прежде всего я попытался использовать imagecopymerge, чтобы увидеть, если я получил лучший результат. Я прочитал документация и пост Родриго на нем действительно помог. Я пытался использовать его функцию, но затем вся прозрачность исчезла. Именно тогда я понял, что GD-версия моего сервера не позволяет imagecreatetruecolor работать правильно. Независимо от того, какой цвет я использую, я всегда получаю черный. Я обновил GD, и все выглядит намного лучше.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector