imagerotate 改变原始图像的颜色

imagerotate changes original image's color

我在使用 PHP 旋转图像时遇到了一个非常奇怪的行为。原始图像在旋转过程中被改变。例如,这里是并排图像。很难看到,但如果仔细观察,刀周围的白色区域正在从#FFFFFF 更改为#FDFDFD。

我正在使用未指定选项的 imagerotate,但是,如果我尝试使用黑色背景颜色进行同样的操作,我会得到一个黑色的旋转图像 "fill",但图像的白色部分仍然存在从#FFFFFF 更改为#FDFDFD。我很困惑。这几乎就像 PHP 是 "rounding" 颜色。

原图:http://i.imgur.com/iYwvxAE.jpg

旋转图像:http://i.imgur.com/0lXXuO6.jpg

编辑:

这是我的代码

$img = imagecreatefromjpeg($localFile);
$img = imagerotate($img, 45, 0);
imagejpeg($img, '/tmp/a.jpg');

我明白了!在 imagerotate (http://php.net/manual/en/function.imagerotate.php) 的 php 文档中,我注意到

"Note: This function is affected by the interpolation method set by 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);