Я теряю информацию о цвете, по-видимому, синий канал, из изображения после использования GD для чтения из версии WebP и вывода JPEG. Почему это происходит и как я могу это исправить?
$pic = imagecreatefromwebp('https://lh4.ggpht.com/uaLB-tbci94IubJJhDZ4n6vJwGF4i9MpFLXl28LBHjVzLIy-K6fhoSILbM4yJcKqq9I=h900-rw');
imagejpeg($pic, './example.jpg', 80);
imagedestroy($pic);
Это выглядит как Ошибка PHP # 70102, msgstr «imagecreatefromwebm () меняет цвет».
Это исправлено в PHP> = 5.6.12 (заметки о выпуске).
У меня ваш скрипт работает корректно (желтого оттенка нет) в PHP 5.6.13
Похоже, что есть несколько бит слишком много …
function fixBlue($im)
{
$f_im = imagecreatetruecolor(imagesx($im),imagesy($im));
$c = imagecolorallocate($f_im, 255, 255, 255);
imagefill($f_im, 0, 0, $c);
for($y=0;$y<imagesy($im);$y++)
{
for($x=0;$x<imagesx($im);$x++)
{
$rgb_old = imagecolorat($im, $x, $y);
$r = ($rgb >> 24) & 0xFF;
$g = ($rgb >> 16) & 0xFF;
$b = ($rgb >> 8) & 0xFF;
$pixelcolor = imagecolorallocate($f_im, $r, $g, $b);
imagesetpixel($f_im, $x, $y, $pixelcolor);
}
}
return $f_im;
}
а потом просто:
$img = imagecreatefromwebp('https://lh4.ggpht.com/uaLB-tbci94IubJJhDZ4n6vJwGF4i9MpFLXl28LBHjVzLIy-K6fhoSILbM4yJcKqq9I=h900-rw');
$img_f = fixBlue($img, 60);
ob_end_clean();
header('Content-type: image/jpeg');
imagejpeg($img_f, null, 80);
imagedestroy($img);
imagedestroy($img_f);