imagerotate改变原始图像的颜色

时间:2015-03-09 19:23:43

标签: php gd php-imagine wideimage

使用PHP旋转图像时遇到一种非常奇怪的行为。旋转期间正在更改原始图像。作为示例,这里是并排图像。很难看,但如果仔细观察,刀周围的白色区域会从#FFFFFF改为#FDFDFD。

enter image description here

我使用的是没有指定选项的imagerotate,但是,如果我尝试使用黑色背景颜色的相同的东西,我会得到一个黑色"填充"的旋转图像,但图像的白色部分是仍然从#FFFFFF改为#FDFDFD。我很困惑。它几乎就像PHP一样"四舍五入"颜色。

enter image description here

原始图片: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');

1 个答案:

答案 0 :(得分:2)

我明白了!在php doc for 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);