2

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

在此处输入图像描述

我正在使用未指定选项的 imagerotate,但是,如果我尝试使用黑色背景颜色进行相同操作,我会得到一个带有黑色“填充”的旋转图像,但图像的白色部分仍然从 #FFFFFF 更改为 #FDFDFD . 我很困惑。这几乎就像 PHP 正在“四舍五入”颜色。

在此处输入图像描述

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

1 回答 1

3

我知道了!在 imagerotate 的 php 文档(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);
于 2015-03-09T20:23:59.103 回答