RESIZE изображений
86 сообщений
#16 лет назад
На досуге появилось желание сделать ресайзер. Вот интересно, как можно реализовать ресайз с определенной шириной и автоматически подстраиваемой под нее высотой.Сейчас есть конструкция вида:
$size = getimagesize(SOURCE);
define('NEWX', $size/2); // ширина "превьюшки"
define('NEWY', $size/2 ); // высота "превьюшки"
$source = imagecreatefromjpeg(SOURCE);
// Создаем новое изображение
$target = imagecreatetruecolor(NEWX, NEWY);
// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$target, // Идентификатор нового изображения
$source, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла
// в новом изображении
0,0, // Координаты (x,y) верхнего левого угла копируемого
// блока существующего изображения
NEWX, // Новая ширина копируемого блока
NEWY, // Новая высота копируемого блока
$size, // Ширина исходного копируемого блока
$size // Высота исходного копируемого блока
);
однако делается лишь масштабирование... а как сделать выбранную ширину и автоматическую высоту?
193 сообщения
#16 лет назад
Если у вас имеется ширина превью и ширина исходной картинки, то посчитайте каков процент составляет ширина превью от исходника, и в этом же процентном соотношении посчитайте высоту от исходной. Должно сработать.
1172 сообщения
#16 лет назад
$image_new_x=$width;
$image_new_y=floor($image_y*$image_new_x/$image_x);
626 сообщений
#16 лет назад
Perl + GDsub resize_img {
my $jpeg_quality = 60; #Quality
my $max_sizex;
my $max_sizey;
my ( $img, $x, $y ) = @_;
GD::Image->trueColor(1);
my $bildle = GD::Image->new( $img );
my ( $width, $height ) = $bildle->getBounds();
$max_sizex = $width / $x;
$max_sizey = $height / $y;
if ( $max_sizex > $max_sizey ) {
$x = $width / $max_sizex;
$y = $height / $max_sizex;
} else {
$x = $width / $max_sizey;
$y = $height / $max_sizey;
}
my $bild=GD::Image->new( $x, $y, 1 );
$bild->copyResampled($bildle,0,0,0,0,$x,$y,$width,$height);
$bild->interlaced('true');
return $bild->jpeg($jpeg_quality);
}
1649 сообщений
#16 лет назад
А можно это как то на ASP делать? Или как то подключить в ASP функцию PHP.
2 сообщения
#16 лет назад
Я использую такую пхп функцию в фотогалерее на пхпfunction create_tmb($bigimgsrc,$trumbalis)
{
$rgb = 0xFFFFFF;
$quality = 100;
$size = @getimagesize($bigimgsrc);
$maxsize = 130;
$format = strtolower(substr($size, strpos($size, '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
$x_gut = 0;
$y_gut = 0;
$ratio = $size/$size;
# для вертикальных исходников
if ($ratio < 1) {
$width = $maxsize*$ratio;
$height = $maxsize; }
# для горизонтальных исходников
else {
$height = $maxsize/$ratio;
$width = $maxsize; }
$x_proporcia = $size/$width;
$y_proporcia = $size/$height;
$actual_height = (($x_proporcia*$height) < $size) ? $x_proporcia*$height : $size;
$actual_width = (($y_proporcia*$width) < $size) ? $y_proporcia*$width : $size;
$bigimg = $icfunc($bigimgsrc);
$trumbcreate = imagecreatetruecolor($width, $height);
# $trumbcreate = imagecreatefrompng('modules/photocompetition/ramka.png');
imagecopyresampled($trumbcreate, $bigimg, 0, 0, 0, 0, $width, $height, $actual_width, $actual_height);
imagejpeg($trumbcreate,$trumbalis,$quality);
imagedestroy($bigimg);
imagedestroy($trumbcreate);
return true;
}