С GD library используйте imagecopyresampled()
.
<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagejpeg($image_p, null, 100);
?>
Edit: Если вы хотите изменить размер файла изображения до определенного размера, это немного сложнее. Все основные форматы изображений используют коэффициент сжатия и сжатия, который зависит от характера сжатия. Сжатие чистого голубого неба, и вы получите лучший коэффициент сжатия, чем у вас будет море людей.
Лучшее, что вы можете сделать, это попробовать определенный размер, попробовать определенный размер и посмотреть, какой размер файла, при необходимости отрегулировать.
Resize ratio = desired file size/actual file size
Resize multipler = square root (resize ratio)
New height = resize multiplier * actual height
New width = resize multiplier * actual width
Это в основном факторы в приближении ожидаемой степени сжатия. Я ожидал бы, что у вас будет определенная толерантность (например, +/- 5%), и вы можете настроить номера по мере необходимости.
Прямого способа изменения размера конкретного файла нет. Наконец, я добавлю, что изменение размера до определенного размера файла довольно необычно. Изменение размера на определенную высоту и/или ширину (сохранение пропорций) гораздо более распространено и ожидается (пользователями).
Обновление: как правильно указано, это приводит к неправильному размеру файла. Отношение должно быть квадратным корнем из отношений размера файла, поскольку вы применяете его дважды (один раз к высоте, один раз к ширине).
В итоге вы получите файлы размером в половину размера, так как фракционный компонент «коэффициент изменения размера» получает квадрат. Если у вас 1MB-изображение, и вы хотите (приблизительно) 512KB-файл, вы хотите изменить его размер так, чтобы newheight = sqrt (2) * height (аналогично ширине) – dcrosta
Благодарим вас за полезные комментарии. – taras
@ dcrosta: совершенно правильно. Исправлено в mltiply по sqrt (ratio). – cletus