15

我真的不明白为什么 GD 具有不同的加载图像的功能,例如:

imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif()  

如果图像是字符串,则只有一个函数?

imagecreatefromstring()

事实上,将图像读入字符串并将其传递给函数要好得多,例如:

$imgBlob = file_get_contents($imagePath);
imagecreatefromstring($imageBlob);
unset($imgBlob);  //> Free memory, but I am not interested in memory consumpation

? 或者我错过了什么?这可能会给新用户带来潜在的困惑

也许他们只是忘了创建一个函数imageCreateFromFile()

附言。当然我对使用该file_get_contents方法的内存消耗不感兴趣

4

2 回答 2

10

imagecreatefromstring()针对传递的图像类型运行开关,检查您的系统是否支持该图像类型,然后实际运行正确的imagecreatefrom*功能。

您可以查看源代码以查看:https ://github.com/php/php-src/blob/master/ext/gd/gd.c?source= cc(函数的第 2280 行,第 2301 行,其中它打开图像类型并调用正确的函数)。

因此,该imagecreatefromstring()函数实际上只是一个辅助包装器。_php_image_type如果您调用实际的图像类型函数,您将从不运行(第 2217 行)中获得非常小的好处。

于 2013-12-10T17:32:47.610 回答
2
imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif()

从文件创建图像资源 - 您将文件路径作为参数传递,这是唯一可接受的输入。

imagecreatefromstring()

从字符串而不是文件创建图像资源 - 它几乎可以是任何东西,您甚至可以输入内容。例如,您可以使用

imagecreatefromstring(base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='));

获得 1x1 像素的透明 gif(用于跟踪 gif)

诚然,您可以将所有内容都通过imagecreatefromstring,但这不会提高内存效率 - 处理大图像会占用大量内存,并且内存限制较低,这会产生巨大的差异。

于 2012-06-09T19:02:41.930 回答