imagerotate меняет цвет исходного изображения
Я сталкиваюсь с очень странным поведением при повороте изображений с помощью PHP. Исходное изображение изменяется во время поворота. В качестве примера приведем соседние изображения. Это трудно увидеть, но если вы посмотрите внимательно, белая область вокруг ножа меняется с #FFFFFF на #FDFDFD.
Я использую imagerotate без указанных опций, однако, если я попробую то же самое с черным цветом фона, я получу повернутое изображение с черной "заливкой", но белая часть изображения все еще изменится с #FFFFFF на #FDFDFD, Я сбит с толку. Это почти как PHP "округляет" цвета.
Исходное изображение: https://i.imgur.com/iYwvxAE.jpg
повернутое изображение: https://i.imgur.com/0lXXuO6.jpg
редактировать:
вот мой код
$img = imagecreatefromjpeg($localFile);
$img = imagerotate($img, 45, 0);
imagejpeg($img, '/tmp/a.jpg');
1 ответ
Я понял! На php doc для imagerotate ( http://php.net/manual/en/function.imagerotate.php) я заметил
"Примечание. На эту функцию влияет метод интерполяции, установленный в imagesetinterpolation()".
Затем я попробовал несколько разных алгоритмов интерполяции. IMG_BELL, кажется, поддерживает белый цвет.
<?php
function LoadJpeg($imgname)
{
$im = imagecreatefromjpeg($imgname);
imagesetinterpolation($im, IMG_BELL);
$im = imagerotate($im, 45, 0);
return $im;
}
$img = LoadJpeg('test.jpg');
imagejpeg($img, 'C:\temp\a.jpg', 100);
imagedestroy($img);