ошибка цвета при конвертации прозрачного png в jpg в php с помощью glib

Я пытаюсь преобразовать частично прозрачный png в jpg в php с помощью gdlib. Я нашел два фрагмента, чтобы помочь мне в этом, но оба метода имеют одну и ту же проблему: полупрозрачные цвета темнее и выглядят неправильно. Вот увеличенный пример из фотошопа: слева png (с белым фоном вместо прозрачного), справа преобразованный png в jpg с обоими фрагментами, которые я использовал:

разница png (слева) в jpg (справа)

Вот оригинальный Png-файл: golf.png

Любая помощь могла бы быть полезна!

$input_file = "card/golf.png";
$output_file1 = "card/golf1.jpg";
$output_file2 = "card/golf2.jpg";

$image = imagecreatefrompng($input_file);

$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagejpeg($bg, $output_file1, 100);
imagedestroy($bg);
imagedestroy($image);

list($width, $height) = getimagesize($input_file);
$image = imagecreatefrompng($input_file);
$output = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($output,  255, 255, 255);
imagefilledrectangle($output, 0, 0, $width, $height, $white);
imagecopy($output, $image, 0, 0, 0, 0, $width, $height);
imagejpeg($output, $output_file2, 100);
imagedestroy($output);

0

Решение

Вы страдаете от квантования. JPEG плохо справляется с этим типом изображения. Если вы хотите уменьшить изменение цвета, вам нужно настроить таблицы квантования. Если вы используете все 1 для таблиц квантования, вы не получите изменения цвета.

0

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

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

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