Принудительно загружать изображение, чтобы сохранить его пропорцию - PullRequest
1 голос
/ 03 мая 2011

Я отображаю изображение в теге изображения

<img src="image.jpg" width="100" height="50" />

Я загружаю изображение размером 100x100. Я хочу, чтобы оно отображалось как тег выше

<img src="image.jpg" width="50" height="50" />

Как этого добиться?

пс

Я использую php, если это вообще проблема на стороне сервера.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Используйте getimagesize(), чтобы получить размер изображения.Затем сделайте это, чтобы сжать, чтобы соответствовать, но сохраняя соотношение сторон:

if ($width > $height)
{
    $ratio = (float)100 / $width;
}
else
{
    $ratio = (float)100 / $height;
}

$width  = (int)round($width  * $ratio);
$height = (int)round($height * $ratio);
0 голосов
/ 03 мая 2011

Этот код поместит любое изображение в поле 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...