Почему при использовании функции imagewebp() в GD PHP игнорируется параметр quality?

Каким образом можно эффективно хранить изображения в двух разных форматах: одно с оригинальным размером (до 2 Мб) и расширением (.jpg, .png или .webp), а другое - миниатюрную версию первого в формате webp с уменьшенным размером для отображения в каталогах?
  • 6 января 2024 г. 14:28
Ответы на вопрос 2
Проблема с функцией `imagewebp()` в GD библиотеке PHP, которая игнорирует параметр quality, может быть вызвана разными причинами. Во-первых, необходимо убедиться в том, что ваша версия PHP и библиотеки GD поддерживают WebP и приемлемый диапазон значений параметра quality. Также стоит проверить, не переопределяется ли в коде данный параметр чем-то другим или не происходит ли ошибок в других частях скрипта.

Что касается эффективного хранения изображений в двух разных форматах, один из подходов может быть таким:

1. Сохраните оригинальное изображение в выбранном формате (JPG, PNG, WebP) используя соответствующие функции GD или Imagick (в зависимости от того, что вы используете):

```php
imagejpeg($resource, 'path/to/original.jpg', 100); // Для JPG
imagepng($resource, 'path/to/original.png', 0); // Для PNG
imagewebp($resource, 'path/to/original.webp', 100); // Для WebP
```

2. Создайте миниатюру с помощью imagecopyresampled() или аналогичных функций для изменения размера изображения, а затем сохраните его в формате WebP:

```php
// Создаём пустое изображение для миниатюры
$thumbnail = imagecreatetruecolor($new_width, $new_height);

// Изменяем размер исходного изображения и копируем в миниатюру
imagecopyresampled($thumbnail, $resource, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);

// Сохраняем миниатюру
imagewebp($thumbnail, 'path/to/thumbnail.webp', 80); // Вы можете выбрать значение качества на ваше усмотрение
```

3. Удаление объектов изображений для освобождения памяти:

```php
imagedestroy($resource);
imagedestroy($thumbnail);
```

Несколько советов:

- Выбор формата и качества изображения зависит от конкретного случая. Для фотографий JPG может быть хорошим выбором из-за баланса размера файла и качества изображения. PNG лучше подходит для изображений с прозрачностью или когда важно сохранить детали без потерь, в то время как WebP может предложить еще более компактный размер файла при сходном качестве.
- Убедитесь, что ваш сервер поддерживает формат WebP и вы используете достаточно новую версию GD или Imagick, если выбрали этот формат.
- При создании миниатюр часто используют библиотеку Imagick, так как она предлагает более высококачественное масштабирование, чем GD.
- Обработку и хранение изображений можно также оптимизировать с помощью систем управления контентом (CMS), плагинов или сторонних сервисов.

Таким образом, вы сможете хранить оригинальные изображения для полноразмерного просмотра и миниатюры для каталогов или превью таким образом, чтобы обеспечить баланс между качеством и размером файла на вашем сайте или приложении.
Привет. Использую этот класс (не реклама), пока всё устраивает
Похожие вопросы