Сжатие и изменение размера изображений для Интернета

Так что в настоящее время я создаю веб-сайт с использованием PHP-интерфейса и полимерного интерфейса. Клиент хочет иметь возможность получать новости для своих событий. Для этого я хочу преобразовать все изображения в webp и создать несколько разных размеров, чтобы я мог быстро их обслуживать в разных браузерах (Mobile, Tablet, Desktop и т. Д.). Однако я не смог найти хороший способ сделать это в PHP или JS. Squoosh отлично подходит для статических ресурсов, но не для контента, созданного пользователем. Любая помощь приветствуется!

5 ответов

Решение

PHP имеет функции для работы с изображениями webp. Попробуй это.

<?php
$im = imagecreatefromstring(file_get_contents('path/to/image.jpg')); // Create image identifier
imagewebp($im, 'path/to/image.webp'); // Generate webp image and save to location
imagedestroy($im); // Free up image identifier
?>

Я очень рекомендую использовать Adobe Photoshop. При этом вы можете вручную сжимать / изменять размер изображений или отправлять их в пакетном режиме.

Я не знаю, есть ли у вас доступ к серверу, но одним из способов может быть вызов ImageMagick из PHP. PHP должен взаимодействовать с сервером, что может быть опасно, поэтому имейте это в виду.

Насколько мне известно, ImageMagick не поддерживает webm, но я уверен, что вы поняли эту идею.

Если вы не хотите, чтобы PHP взаимодействовал с самим сервером, вы также можете сканировать неконвертированные / измененные изображения, а затем конвертировать их. В Linux это может быть: find ./ -name "*.jpg" -exec CONVERT_FUNCTION{} \;

Изменение размера должно быть обязательно сделано на стороне сервера. То, что вы можете сделать, это использовать srcset а также sizes Атрибуты тега изображения для оптимизации используемой версии:

<img srcset="elva-fairy-320w.jpg 320w,
             elva-fairy-480w.jpg 480w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 320px) 280px,
            (max-width: 480px) 440px,
            800px"
     src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy" />

(непосредственно из документации Mozilla)

Для изменения размера и сжатия изображения вам понадобится библиотека изображений, установленная с вашим PHP, например ImageMagick или GD.

Вы можете написать свою собственную функцию изменения размера, как показано на /questions/24854056/izmenit-razmer-izobrazheniya-v-php/24854080#24854080, но вы должны быть осторожны с типами изображений, поскольку они могут иметь свою собственную функцию для каждого типа.

Возможно, более простой способ изменить размер — использовать пакет обработки изображений. https://image.intervention.io/v2/api/resize (для этого также необходимо установить GD или IamgeMagick):

      // resize image to fixed size
$img->resize(300, 200);

// resize only the width of the image
$img->resize(300, null);

// resize only the height of the image
$img->resize(null, 200);

// resize the image to a width of 300 and constrain aspect ratio (auto height)
$img->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});

Используя эту библиотеку, вы также можете сжать изображение, используя функцию кодирования или сохранения:

https://image.intervention.io/v2/api/encode

https://image.intervention.io/v2/api/save

      // open and resize an image file
$img = Image::make('public/foo.jpg')->resize(300, 200);

// save file as jpg with medium quality
$img->save('public/bar.jpg', 60);

Вы также можете использовать API tinypng для сжатия изображений: https://tinypng.com/developers , он сжимает jpg, png и WebP и предоставляется бесплатно, если вы масштабируете 500 изображений в месяц.

Другие вопросы по тегам