Я сталкиваюсь с очень странным поведением при повороте изображений с помощью PHP. Исходное изображение изменяется во время поворота. В качестве примера приведем соседние изображения. Это трудно увидеть, но если вы посмотрите внимательно, белая область вокруг ножа меняется с #FFFFFF на #FDFDFD.
Я использую imagerotate без указания параметров, однако, если я попробую то же самое с черным цветом фона, я получу повернутое изображение с черной «заливкой», но белая часть изображения все еще изменится с #FFFFFF на #FDFDFD , Я сбит с толку. Это почти как PHP «округляет» цвета.
Исходное изображение: http://i.imgur.com/iYwvxAE.jpg
редактировать:
вот мой код
$img = imagecreatefromjpeg($localFile);
$img = imagerotate($img, 45, 0);
imagejpeg($img, '/tmp/a.jpg');
Я понял! На 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);
Других решений пока нет …