Подтвердить что ты не робот

Почему есть imageCreateFrom *, если есть imageCreateFromString?

Я действительно не могу понять, почему у 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

4b9b3361

Ответ 1

imagecreatefromstring() запускает переключатель в отношении типа пройденного изображения, проверяет, поддерживает ли ваша система этот тип изображения, а затем фактически запускает правильную функцию imagecreatefrom*.

Вы можете проверить исходный код, чтобы увидеть это: https://github.com/php/php-src/blob/master/ext/gd/gd.c?source=cc (строка 2280 для функции, строка 2301, где он включает тип изображения и вызывает правильная функция).

Итак, функция imagecreatefromstring() на самом деле просто вспомогательная оболочка. Вы получите очень небольшое преимущество, если не используете _php_image_type (строка 2217), если вы вызываете фактическую функцию типа изображения.

Ответ 2

imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif()

создать ресурс изображения из файла - вы передаете путь к файлу в качестве параметра и что единственный приемлемый ввод.

imagecreatefromstring()

создает ресурс изображения из строки, а не файла - это может быть практически что угодно, вы даже можете вводить содержимое. Например, вы можете использовать

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

чтобы получить прозрачный gif 1x1 пиксель (полезно для отслеживания gif)

Конечно, вы можете передать все через imagecreatefromstring, но это не будет эффективно с точки зрения памяти - обработка больших изображений занимает много памяти и с низким пределом памяти, что имеет огромное значение.