Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > use Image Magick


Автор: MaxPayne 22.9.2010, 17:40
Смысл казалось бы простой, но полазив по форумам не нашел ответа или нашел не работающие. 

Человек загружает картинку любого размера мне надо сделать из нее 500х375. 

Проблема: Если картинка после ПРОПОРЦИОНАЛЬНОГО уменьшения получается 400х375 или 500х200 - не могу нарастить края до 500х375

Пример кода:

Код


my $image = Image::Magick->new;
$x = $image->Read("$pathimg$randomname");
($img_width, $img_height) = $image->Get('width', 'height');

$scalemax = $scalew = $img_width/500;
$scaleh = $img_height/375;
if ($scalemax < $scaleh){$scalemax=$scaleh;}
$res_height=int($img_height/$scalemax);
$res_width=int($img_width/$scalemax);
$image->Scale(width=>"$res_width", height=>"$res_height");

if ($res_width < 500){$res_width=500;}
if ($res_height < 375){$res_height=375;}

????????????

$image->Crop('500x375');


На место вопросов пробовал ставить $image->Scale(Geometry=>'$res_width."x".$res_height'); , но не пашет.

Пробовал и без кавычек $image->Scale(Geometry=>$res_width."x".$res_height); 

Надо нарастить белыми полями, а не растянуть вот так $image->Scale(width=>"$res_width", height=>"$res_height");

Автор: shamber 22.9.2010, 18:07
MaxPayne, а нельзя создать пустую с белым фоном, а поверх нее в центре положить уменьшенную?

Автор: MaxPayne 22.9.2010, 18:19
я после все преобразований накладываю поверх png (500х375) - так вот он оказывается обрезанным, т.к. не хватает размера.

Автор: shamber 22.9.2010, 18:22
понял что вас не понял....

Автор: shamber 22.9.2010, 22:16
Надеюсь то что нужно
Код

#!/usr/bin/perl -w
use strict;
use Image::Magick;
my $background=Image::Magick->new;
my $file=Image::Magick->new;
$background->Read('new.png');
$file->Read('new2.png');
#получаем размеры файлов
my ($x,$y) = $background->Get('base-columns','base-rows');
my ($x1,$y1) = $file->Get('base-columns','base-rows');

#считаем максимально возможный коэффициент
my $xo = $x/$x1;
my $yo = $y/$y1;
my $scale;
if($xo>=$yo){
    $scale = $yo;
}else{
    $scale = $xo;
}
#получаем размер для масштабируемого изображения
$xo = $scale*$x1;
$yo = $scale*$y1;
#получаем координаты для размещения в центре
$x = ($x-$xo)/2;
$y = ($y-$yo)/2;
#масштабируем
$file->Resize(width=>$xo, height=>$yo);
#накладываем
$background->Composite(image=>$file,compose=>'over',geometry=>"+$x+$y");
#сохраняем
 $x = $background->Write("./new3.png");
 warn "$x" if "$x";


       файл new.png                              файл new2.png
просто png с белым фоном.              изменяемый файл.                              результат
  
http://ipicture.ru/Gallery/Viewfull/1278569.html        http://ipicture.ru/Gallery/Viewfull/1278570.html       http://ipicture.ru/Gallery/Viewfull/1278571.html


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)