#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