#php #html #image #file-upload
#php #HTML #изображение #загрузка файла
Вопрос:
Я размещаю изображение в теге image
<img src="image.jpg" width="100" height="50" />
Если пользователь загружает изображение размером 100×100, я хочу, чтобы оно отображалось так, как тег выше
<img src="image.jpg" width="50" height="50" />
Как этого добиться?
ps
Я использую php, если это вообще проблема на стороне сервера.
Комментарии:
1. Итак, вы хотите сохранить пропорции изображения и задать ширину или высоту?
2. Не устанавливать, просто сохранять пропорции в пределах ширины или высоты. Если исходное изображение 100×10 и тег <img src=»image.jpg » width = «50» height =»70″ /> Мне нужно использовать целых 50 пикселей ширины и только 10 пикселей из 70 доступных для высоты. Будет много пустого места, но изображение сохранит свою форму. Надеюсь, я уловил суть. Спасибо.
Ответ №1:
Используйте getimagesize()
для получения размера изображения. Затем сделайте это для уменьшения размера, но с сохранением соотношения сторон:
if ($width > $height)
{
$ratio = (float)100 / $width;
}
else
{
$ratio = (float)100 / $height;
}
$width = (int)round($width * $ratio);
$height = (int)round($height * $ratio);
Ответ №2:
Этот код поместит любое изображение в поле MaxWidth x maxHeight с сохранением соотношения сторон и заполнения белым фоном.
$img = new Imagick('orig.jpg');
$maxWidth = 100;
$maxHeight = 50;
$geom = $img->getImageGeometry();
$fitWidth = (($maxWidth/$geom['width'])<($maxHeight/$geom['height']))?true:false;
if($fitWidth){
$img->thumbnailImage($maxWidth,0,false);
}else{
$img->thumbnailImage(0,$maxHeight,false);
}
$canvas = new Imagick();
$canvas->newImage($maxWidth,$maxHeight,'white','jpg');
$geom = $img->getImageGeometry();
$x = ($maxWidth-$geom['width'])/2;
$y = ($maxHeight-$geom['height'])/2;
$canvas->compositeImage($img,imagick::COMPOSITE_OVER,$x,$y);
$canvas->writeImage('thumb.jpg');