我写了一些使用GD的PHP代码,在Ubuntu机器上运行(PHP 5.5.9),现在将其移植到了Amazon Linux上的Amazon EC2上(PHP 5.5.31),但是从相同的输入数据文件中得到了完全不同的结果(我只使用
imagecreatefromstring()
;$data
包含JPEG文件的内容)。
- 在更改机器之前,它会将白色变为透明。现在它不再进行这种变化。
- 它曾经可以完美地裁剪图形。现在它在左侧留下一点白色,并且在右侧切掉了一小部分图像。
- 左侧有一条细黑线。
- 我甚至无法使用
imagecolorset()
来更改图像的颜色。
if ($isFileString) {
$src2 = imagecreatefromstring($data);
} else {
$src2 = imagecreatefromjpeg($data);
}
// This was an attempt to get it to recognize transparent.
if (!unlink ("../drive/sigs/tmp.png"))
die("Failed to delete tmp.png");
imagepng($src2, "../drive/sigs/tmp.png");
imagedestroy($src2);
$src = imagecreatefrompng("../drive/sigs/tmp.png");
imagealphablending($src, false);
imagesavealpha($src, true);
for ($i=0; $i< 1024; $i++) {
echo $i;
echo print_r(imagecolorsforindex($src, $i));
imagecolorset($src, $i, 255, 255, 255,255);
echo print_r(imagecolorsforindex($src, $i));
echo "<BR>";
}
$src = imagecropauto($src, IMG_CROP_WHITE);
$white = imagecolorallocate($src, 255, 255, 255);
imagecolortransparent($src, $white);
$src = imagerotate($src, -90, 0);
编辑
以下是一个例子,说明我无法让imagecolorset()
在文件中进行更改,下面是对$i
循环的输出:
1Array ( [red] => 0 [green] => 0 [blue] => 1 [alpha] => 0 ) 1Array ( [red] => 0 [green] => 0 [blue] => 1 [alpha] => 0 ) 1
2Array ( [red] => 0 [green] => 0 [blue] => 2 [alpha] => 0 ) 1Array ( [red] => 0 [green] => 0 [blue] => 2 [alpha] => 0 ) 1
3Array ( [red] => 0 [green] => 0 [blue] => 3 [alpha] => 0 ) 1Array ( [red] => 0 [green] => 0 [blue] => 3 [alpha] => 0 ) 1
编辑2
更多信息:我检查了GD版本(php -i | grep -i gd
)。我惊讶地发现Ubuntu版本的GD版本为2.1.1-dev,而EC2版本的GD版本为“捆绑(2.1.0兼容)”。我对GD不太熟悉,所以我更倾向于认为这是我的问题,而不是亚马逊提供了一个错误的GD版本。
编辑3
似乎这不是内存问题。
memory_get_peak_usage()
报告约为35MB。gd_info()
报告的唯一区别是版本号。