Как можно массово конвертировать изображения на сервере из jpg в webp?
Как можно массово конвертировать изображения на сервере из jpg в webp?
На сервере в разных папках расположены картинки в формате jpg, есть ли какой-нибудь эффективный метод конвертировать их в webp? Если есть варианты (пусть даже платные), дайте знать! P.S. 18000 + картинок, вручную очень долго буду возиться.
Ответы (1 шт):
если у вас на сервере стоит php от 5.4 и выше с модулем GD, то можно написать скрипт который конвертирует все картинки в папке и подпапках. https://snipp.ru/php/webp-php - тут написано как в php преобразовать jpg в webp. https://vk-book.ru/poisk-fajla-v-papke-i-vsex-podpapkax-primer-rekursii-2/ - тут как рекурсивно обходить папку с подпапками. Набросал скрипт. Кладете его в папку с картинками и запускаете. Можно с браузера, но тогда может отвалится по max_execution_time, можно запускать еще раз, продолжится работа. Но 18000 - большая нагрузка на сервер. Тестил на винде, но вроде в линуксе тожа отработает. При работе могут сыпаться предупреждения, это нормально. Просто скрипт пытается из каждого файла получить jpeg картинку, если успех - то конвертим, иначе дальше и предупреждение в логи.
<?php
function jpg2webp($folder){
$delim="/";
if(strpos(php_uname(),'Windows')!==false)$delim="\\";
$iterator = new RecursiveDirectoryIterator($folder);
foreach (new RecursiveIteratorIterator($iterator) as $file) {
if ($file->isDir()) {
continue;
}
$info = pathinfo($file->getPathname());
$filename=$info['dirname'].$delim.$info['filename'].'.'.'webp';
if(!file_exists($filename)){
$img = imageCreateFromJpeg($file);
if($img!=false){
echo $filename.'<br>';
imageWebp($img, $info['dirname'].$delim.$info['filename'].'.'.'webp', 100);
imagedestroy($img);
}
}
}
}
jpg2webp(dirname(__FILE__));
?>