изменение размера основной массы изображений на 1280x 720 без обрезки

#php #image-size

#php #размер изображения

Вопрос:

У меня есть 60 jpg изображений внутри img папки
, все они разных размеров
, все они должны быть 1280 x 720

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

 function resize_no_crop($el, $w, $h) {
    list($width, $height) = getimagesize($el);
    $r = $width / $height;
    if ($w/$h > $r) {
        $newwidth = $h*$r;
        $newheight = $h;
    } else {
        $newheight = $w/$r;
        $newwidth = $w;
    }
    $src = imagecreatefromjpeg($el);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    return $dst;
}

$arr = glob('img/*');
foreach($arr as $el){resize_no_crop($el, 1280, 720);}
echo 'finito';
 

Комментарии:

1. С точки зрения человека, совсем не знающего PHP, похоже, что есть функция для изменения изображений, но я не могу найти команду для записи нового изображения на диск. Если это одноразовая работа, ImageMagick из командной строки может быть подходящей альтернативой: imagemagick.org/script/command-line-processing.php

Ответ №1:

Вы не сохраняете изображения:

 $quality = 95;
foreach($arr as $el){
    // Destinazione
    $dest = dirname($el).DIRECTORY_SEPARATOR.basename($el, '.jpg') . '.cropped.jpg';

    $resized = resize_no_crop($el, 1280, 720);
    imagejpeg($resized, $dest, $quality);
}
 

Или вы можете использовать $dest = $el для перезаписи исходных изображений (я никогда не рекомендую это).

Ответ №2:

Используйте Imagick resizeImage:

 foreach($arr as $el) {
    $im = new Imagick();
    $im->readImage($el);
    $im->resizeImage(1280, 720, Imagick::FILTER_BOX, 1);
    $im->writeImage($el);
    $im->destroy();
}
 

Из документации: https://www.php.net/manual/en/imagick.resizeimage.php