Масштабирование картинки на Perl (модуль Image::Magick) без потери качества |
[исправить] |
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"); #Сохраняем изображение.
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / Perl / Полезные подпрограммы на Perl / Обработка изображений на Perl |
1, Motodor (?), 11:44, 28/06/2004 [ответить]
| +/– |
В коде присутствует ошибка
$image->Resize(geometry=>geometry, width=>$nx, height=>150);
должно выглядить как
$image->Resize(width=>$nx, height=>150);
это баг самого Magick'a . | |
2, Den (??), 12:11, 04/05/2006 [ответить]
| +/– |
Ниче не баг.
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 ). | |
3, Den (??), 13:16, 05/05/2006 [ответить]
| +/– |
И еще, строки:
$image->Crop(x=>$nnx, y=>0);
$image->Crop('200x150');
Должны выглядеть как:
$image->Crop(x=>$nnx, y=>0, geometry=>200x150);
| |
4, SKi (?), 21:02, 08/10/2007 [ответить]
| +/– |
Кавычки тоже надо:
_Должны выглядеть как:
$image->Crop(x=>$nnx, y=>0, geometry=>'200x150');
| |
|