在 1280x 720 上调整大量图像的大小而不裁剪

resize bulk of images on 1280x 720 without cropping

我在 img 文件夹中有 60 张 jpg 图片
他们都是不同的维度
需要全部为 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';

使用 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

您没有保存图像:

$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覆盖原图(我不推荐这样做)。