【发布时间】:2016-05-14 21:13:15
【问题描述】:
我有一个非常大的 PNG 图像,我正在编写一种方法来获取该图像的特定(但不断变化的)像素处的颜色值。当我使用以下方法创建图像时:
$image = imagecreatefrompng('map.png');
是整个图像加载到内存中(不理想),还是只是读取元数据并准备其他调用,以便在我调用时:
int imagecolorat ( resource $image , int $x , int $y )
文件会寻找正确的像素还是从内存中提取?如果我试图优化此例程以重复调用,是否将我需要的图像数据转换为一些原始二进制格式并使用文件搜索会更好?如果可能的话,我想避免将整个文件重复加载到内存中。
【问题讨论】:
-
整个图像被加载到内存中,每像素4字节;任何操作通常都需要两倍的内存
-
@MarkBaker - 听起来像是答案而不是评论:) 把它放在下面,我会给你支票。 (顺便说一句,这是有道理的,因为通过压缩,文件中像素的确切位置将不为人知。)看起来我必须将其转换为平面文件并使用 fopen / fseek
-
曾经有一个名为 PHPqb 的 PHP 扩展(该网站现在 php-qb.net 似乎已经死了),它是为高内存效率的图像处理而设计的,尽管它仍然可以通过 PECL 获得/跨度>
标签: php php-gd memory-efficient