我真的不明白为什么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()
?
Ps。当然我对使用file_get_contents
方法的内存消耗不感兴趣
答案 0 :(得分:9)
imagecreatefromstring()
针对传递的图像类型运行切换,检查您的系统是否支持该图像类型,然后实际运行正确的imagecreatefrom*
函数。
您可以查看源代码以查看:https://github.com/php/php-src/blob/master/ext/gd/gd.c?source=cc(第2280行为函数,第2301行,它打开图像类型并调用正确的函数)。
因此,imagecreatefromstring()
函数实际上只是一个辅助包装器。如果你调用实际的图像类型函数,你可以从不运行_php_image_type
(第2217行)中获得非常小的好处。
答案 1 :(得分:2)
imagecreatefromjpeg()
imagecreatefrompng()
imagecreatefromgif()
从文件创建图像资源 - 您将文件路径作为参数传递,这是唯一可接受的输入。
imagecreatefromstring()
从字符串创建图像资源,而不是文件 - 它几乎可以是任何东西,甚至可以输入内容。例如,您可以使用
imagecreatefromstring(base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='));
获得1x1像素透明gif(用于跟踪GIF)
当然,您可以通过imagecreatefromstring
传递所有内容,但它不会提高内存效率 - 处理大型图像会占用大量内存并且内存限制较低会产生巨大差异。