Автоматическое уменьшение размера изображения

VipSeoMan
На сайте с 02.01.2010
Offline
124
8147

Не подскажете есть ли способы автоматического уменьшения размера изображения по наибольшей стороне, причем чтоб меньшая сторона изменялась пропорционально.

Пример:

Ставим ссылку на картины 500x300 и 200x250 и при публикаций новости (в данном случае CMS DLE), чтоб картинка в первом случае имело размер 50x30, а во втором 40x50.

Можно ли такое сделать при помощи стандартного html и css?

Оговорю сразу стандартное уменьшение на самом движке ДЛЕ не подойдет.

[Удален]
#1

Под способом понимается "дайте готовый скрипт"? Не думаю, что такой найдете, смотрите примеры, их очень много...

VipSeoMan
На сайте с 02.01.2010
Offline
124
#2
Mr.T:
Под способом понимается "дайте готовый скрипт"? Не думаю, что такой найдете, смотрите примеры, их очень много...

я только спросил существуют ли способы, а не просил ничего мне предоставлять

Ervin
На сайте с 15.08.2008
Offline
112
#3

<img style="max-width: 50px; max-height: 50px;" src="image.jpg" />

На IE работать не будет, для него только по одной стороне:

<img style="width: 50px;" src="image.jpg" />

Вторая изменится автоматически, с сохранением пропорций.

Credendo vidas!
herbst
На сайте с 16.07.2010
Offline
70
#4

Нужно определить наибольшую сторону, поэтому только средствами HTML+CSS справиться не удастся. С Javascript в принципе вполне решаемая задача.

Если можно использовать PHP, то с этой задачей отлично справится легкий скрипт TimThumb.php

S
На сайте с 25.11.2008
Offline
124
#5

Я когда то нашел какие то начинания, почитал/подпилил и в итоге получилась такая функция. Она естественно адаптирована под мои нужды


function image_resize($filename, $smallimage, $w, $h)
{
// получим размеры исходного изображения
$size_img = getimagesize($filename);

// Если размеры меньше, то масштабирования не нужно
if (($size_img[0]<$w) && ($size_img[1]<$h))
{
return false;
}

// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];

if ($src_ratio>=1) //горизонтальная картинка
{
$new_height=$h;
$new_width=$new_height*$src_ratio;
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($new_width, $new_height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);
// масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $size_img[0], $size_img[1]);

}
else //вертикальная картинка
{

$new_width=$w;
$new_height=$new_width/$src_ratio;
$dest_img = imagecreatetruecolor($new_width, $new_height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);
// масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $size_img[0], $size_img[1]);
}

// сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img, $smallimage);
else if ($size_img[2]==1) imagegif($dest_img, $smallimage);
else if ($size_img[2]==3) imagepng($dest_img, $smallimage);
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}

А вот ее использование


if (image_resize($avatar_file, $avatar_file_name_, 120, 160)) ...

А на страницу вывожу в ДИВе с размерами мне нужными (120 х 160 например) с


background-repeat: no-repeat;
background-position: center;

а background-image ставлю преобразованную картинку

Бесплатные виджеты для сайта (https://pfka.ru). Технический анализ сайта ( https://linkonavt.ru/services/sitetechnologies ).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий