Php gd警告:内存分配乘法的乘积将超过INT_MAX

Php gd警告:内存分配乘法的乘积将超过INT_MAX,php,integer,gd,Php,Integer,Gd,我有以下代码: echo PHP_INT_MAX . '<br/>'; echo 174400 * 249600 . '<br/>'; $img = imagecreatetruecolor(174400, 249600); 第一个问题是imagecreatetruecolor为什么会优雅地失败?第二个问题是我能做些什么?如何在PHP中创建大图像?该错误由GD库中的保护代码触发,该代码检查整数溢出。174400 x 249600=4353024000=0x0000000

我有以下代码:

echo PHP_INT_MAX . '<br/>';
echo 174400 * 249600 . '<br/>';
$img = imagecreatetruecolor(174400, 249600);

第一个问题是imagecreatetruecolor为什么会优雅地失败?第二个问题是我能做些什么?如何在PHP中创建大图像?

该错误由GD库中的保护代码触发,该代码检查整数溢出。174400 x 249600=4353024000=0x0000000A-229AC000。该数字不适合32位整数,因此GD会放大。理论上,有人可以去那里修复代码,这样就可以使用64位整数。目前还没有人这样做,因为人们不太可能在每个请求中允许超过4G的内存。总有一天会发生的


顺便说一句,在GD中存储每个像素需要5个字节:一个字节用于R、G、B和A,另一个字节用于消除混叠。

错误由GD库中的保护代码触发,该代码检查整数溢出。174400 x 249600=4353024000=0x0000000A-229AC000。该数字不适合32位整数,因此GD会放大。理论上,有人可以去那里修复代码,这样就可以使用64位整数。目前还没有人这样做,因为人们不太可能在每个请求中允许超过4G的内存。总有一天会发生的


顺便说一句,在GD中存储每个像素需要5个字节:一个字节用于R、G、B和A,另一个字节用于消除混叠。

在真彩色图片中,一个像素至少使用3个字节,因此4353024000个像素需要121,62 GB。你的服务器有多少内存?121 GB太多了,我只有8 GB的内存。但我想创建PNG图像,在这种分辨率下不应该使用太多RAM。如果PNG有alpha通道,它将使用每像素4字节,即162.16 GB。您必须了解,程序处理原始图像字节压缩图像格式仅对存储和传输有用。我怀疑PHP是否能处理这样的图像。你可能必须找到一个第三方程序,它不能将完整的图像加载到内存中,并从你的PHP脚本中调用它?你们在处理望远镜的图像吗?这是我游戏的地图。我正在尝试创建地图生成器。在真彩色图片中,1个像素至少使用3个字节,因此4353024000个像素需要121,62 GB。你的服务器有多少内存?121 GB太多了,我只有8 GB的内存。但我想创建PNG图像,在这种分辨率下不应该使用太多RAM。如果PNG有alpha通道,它将使用每像素4字节,即162.16 GB。您必须了解,程序处理原始图像字节压缩图像格式仅对存储和传输有用。我怀疑PHP是否能处理这样的图像。你可能必须找到一个第三方程序,它不能将完整的图像加载到内存中,并从你的PHP脚本中调用它?你们在处理望远镜的图像吗?这是我游戏的地图。我正在尝试创建地图生成器。那么解决方案是什么?没有解决方案。那么大的映像无论如何都不会在客户端打开。创建它没有意义。我也有同样的问题。我正在尝试创建一个与此脚本等效的脚本,但使用GD而不是ImageMagick,基本图像是50000px正方形,需要打开以切割成256px正方形的平铺,这需要在服务器上每15分钟执行一次,因为基本图像会随时间更新。我想我必须将服务器移动到安装了ImageMagick的服务器上。那么解决方案是什么呢?没有解决方案。那么大的映像无论如何都不会在客户端打开。创建它没有意义。我也有同样的问题。我正在尝试创建一个与此脚本等效的脚本,但使用GD而不是ImageMagick,基本图像是50000px正方形,需要打开以切割成256px正方形的平铺,这需要在服务器上每15分钟执行一次,因为基本图像会随时间更新。我想我必须把服务器移到安装了ImageMagick的服务器上。
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