2016-05-14 67 views
2

我有一个非常大的PNG图像,我正在写一个方法来获取该图像的特定(但不断变化)像素的颜色值。当我创建使用图像:PHP图像资源的效率如何?

$image = imagecreatefrompng('map.png'); 

加载到内存中(不理想)的整体形象,还是只是读取的元数据,并准备其他呼叫,这样,当我打电话:

int imagecolorat (resource $image , int $x , int $y) 

它将文件寻找正确的像素或拉内存?如果我试图优化这个例程被重复调用,我会更好地将我需要的图像数据转换为一些原始的二进制格式并使用文件查找?如果可能的话,我想避免重复将整个文件加载到内存中。

+4

整个图像被加载到内存中,每个像素4字节;任何操作通常需要双倍的内存量 –

+0

@MarkBaker - 听起来像一个答案,而不是评论:)把它放在下面,我会给你检查。 (Bummer顺便说一句,它是有道理的,因为压缩一个像素在一个文件中的确切位置不会被知道。)看起来像我将不得不将它转换为一个平面文件,并使用fopen/fseek – BadPirate

+0

曾经有一个PHP扩展称为PHPqb(该网站现在似乎已经死了http://php-qb.net/),它专为图像的高效内存操作而设计,尽管它仍然可以通过[PECL]获得(https:// pecl。 php.net/package/qb) –

回答

0

你需要一个大的php内存来玩php图像资源。 改为使用graphicsMagick。 http://www.graphicsmagick.org/

+1

不是真的想要做图像处理,我实际上想要做的是获得一些特定坐标的地理特征。 Elevation有一个Google API,但我需要树密度等东西 - 这些东西的唯一来源似乎是大量的灰度TIFF文件。基本上,我将不得不将它们转换成类似于8位BMP(0压缩)的东西,以便我可以通过数学方法知道要访问哪个字节以获取我需要的值。 – BadPirate