我有这段代码:
echo PHP_INT_MAX . '<br/>';
echo 174400 * 249600 . '<br/>';
$img = imagecreatetruecolor(174400, 249600);
它给了我这个输出:
9223372036854775807
43530240000
Warning: imagecreatetruecolor(): gd warning: product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully in /home/bartek/Documents/WWW/WOF/application/controllers/EditorController.php on line 53
第一个问题是为什么imagecreatetruecolor优雅失败?第二个问题是我能做些什么呢?如何在PHP中创建大图像?
答案 0 :(得分:3)
错误由GD库中的保护代码触发,该代码检查整数溢出。 174400 x 249600 = 43530240000 = 0x0000000A-229AC000。该数字不适合32位整数,因此GD会爆炸。理论上,有人可以进入并修复代码,因此使用64位整数。还没有人这样做过,因为人们不太可能每次请求允许超过4 gig的内存。总有一天它会发生。
顺便说一句,在GD中存储每个像素需要5个字节:R,G,B和A为一个字节,加上一个字节用于抗锯齿。