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);
Другие вопросы по тегам