С библиотекой GD используйте 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);
?>
Редактировать. Если вы хотите изменить размер файла изображения до указанного размера, это немного сложнее. Все основные форматы изображений используют сжатие, и степень сжатия зависит от характера сжимаемого объекта. Сожмите ясное голубое небо, и вы получите лучшую степень сжатия, чем море людей.
Лучшее, что вы можете сделать, это попробовать определенный размер, попробовать определенный размер и посмотреть, каков размер файла, при необходимости отрегулировав.
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%), и вы сможете настроить числа по мере необходимости.
Нет прямого способа изменить размер до определенного размера файла. Наконец, я добавлю, что изменение размера файла до определенного размера довольно необычно. Изменение размера до определенной высоты и/или ширины (с сохранением соотношения сторон) гораздо более распространено и ожидаемо (пользователями).
Обновление: как правильно указано, это дает неправильный размер файла. Соотношение должно быть квадратным корнем из соотношений размеров файлов, поскольку вы применяете его дважды (один раз по высоте, один раз по ширине).
person
cletus
schedule
23.09.2009