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);
我在使用 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);