#vips
Вопрос:
Я использую библиотеку PHP libvips, когда я использую эту функцию writeToBuffer для записи в буфер изображения, она выдает мне следующие типы ошибок.
Fatal error: Uncaught JcupittVipsException: magicksave_buffer: libMagick error: no decode delegate for this image format `' @ error/blob.c/ImagesToBlob/2413
Примечание — Эта ошибка возникает только в том случае, если мой тип изображения-gif
$imagePathInfo = pathinfo($inputFileName); $imgExtension = $imagePathInfo['extension']; $img = VipsImage::newFromFile($inputFileName, ['access' =gt; 'sequential']); $img = $img-gt;writeToBuffer('.' . $imgExtension);
Ответ №1:
По умолчанию libvips загружает только первый кадр анимации. Чтобы загрузить все кадры, установите n
параметр (количество страниц) равным -1. Воспользуйся:
$img = VipsImage::newFromFile($inputFileName, [ 'access' =gt; 'sequential', 'n' =gt; -1 ]);
libvips 8.11 использует imagemagick для записи GIF-изображений. Вам нужно указать imagemagick, в каком формате писать с format
помощью параметра, например.:
$img = $img-gt;writeToBuffer('.' . $imgExtension, [ 'format' =gt; $imgExtension ]);
libvips 8.12 (срок поставки до конца ноября 2021 года) автоматически передаст правильное значение формата в imagemagick, а также имеет специальный и гораздо более быстрый GIF-редактор.
Комментарии:
1. Если я передам расширение изображения, будет ли оно работать для всех изображений, как у меня в общей функции в моем классе, которая принимает имя файла (с расширением jpg, jpeg и т. Д.). Мой вопрос в том, будет ли последнее решение, которое вы дали, работать для всех типов изображений?
2. Нет, пока вам нужно будет обрабатывать GIF-файлы как отдельный случай. libvips 8.12 исправляет это.