use Image::Magick;
my $image = Image::Magick->new; #новый проект
my $x = $image->Read("photo.jpg"); #открываем файл
my ($ox,$oy)=$image->Get('base-columns','base-rows'); #определяем ширину и высоту изображения
my $nx=int(($ox/$oy)*150); #вычисляем ширину, если высоту сделать 150
$image->Resize(geometry=>geometry, width=>$nx, height=>150); #Делаем resize (изменения размера)
if($nx > 200) { #Если ширина получилась больше 200
my $nnx = int(($nx-200)/2); #Вычисляем откуда нам резать
$image->Crop(x=>$nnx, y=>0); #Задаем откуда будем резать
$image->Crop('200x150'); #С того места вырезаем 200х150
}
$x = $image->Write("photo.jpg"); #Сохраняем изображение.URL: http://www.webscript.ru/stories/02/11/11/9439190
Обсуждается: http://www.opennet.me/tips/info/404.shtml
В коде присутствует ошибка$image->Resize(geometry=>geometry, width=>$nx, height=>150);
должно выглядить как
$image->Resize(width=>$nx, height=>150);
это баг самого Magick'a .
Ниче не баг.
Note, that the geometry parameter is a short cut for the width and height parameters (e.g. geometry=>'106x80' is equivalent to width=>106, height=>80 ).
И еще, строки:
$image->Crop(x=>$nnx, y=>0);
$image->Crop('200x150');
Должны выглядеть как:
$image->Crop(x=>$nnx, y=>0, geometry=>200x150);
Кавычки тоже надо:
_Должны выглядеть как:
$image->Crop(x=>$nnx, y=>0, geometry=>'200x150');