воскресенье, 9 октября 2011 г.

Резалка изображений (crop)

Сегодня речь пойдёт о резалке изображений.

Недавно для одного проекта, нам понадобилось очень много изображений. Что бы выбрать лучшие, пришлось скачивать их из интернета вручную(автоматизировать эту подзадачу не удалось, т.к. надо было выбирать лучшие картинки). Из этих основных изображений нужно было сделать маленькие иконки. Тут и пришла в голову мысль, об автоматизации этого процесса. Я решил написать скрипт на языке perl с помощью одной библиотеки ImageMagick.
Вот что у меня вышло...

#!/usr/bin/perl -w
use Image::Magick;
use Image::ExifTool;
use File::Basename;

my($image, $x);
my $count=0;
foreach my $File (<./raw_imgs/*.jpg>)
{

my $n_file = basename($File);
print "Handle image: $File\n";print "Create image: ./img/$n_file\n";
$exifTool = new Image::ExifTool;
$exifTool->SetNewValue('*'); # delete all...
$exifTool->WriteInfo($File, "./img/".$n_file);

$image = Image::Magick->new;
$x = $image->Read("./img/".$n_file);
$image->Set(quality=>85);
$image->Contrast();
$image->Normalize();
$x = $image->Write("./img/".$n_file);

$image = Image::Magick->new;
$x = $image->Read("./img/".$n_file);

my $ox;
my $oy;
($ox, $oy) = $image->Get('base-columns','base-rows');



#$_x= int(($ox-250)/2);
#$_y= int(($oy-250)/2);
#print $ox.' '.$oy."\n".$_x.' '.$_y."\n";

my $min=0;
my $_x;
my $_y;

if ($oy <= $ox)
{
$min = $oy;
$_x = int(($ox-$min)/2);
$_y = 0;
$image->Crop(x=>$_x, y=>$_y, geometry=>$min.'x'.$min);
}
else
{
$min = $ox;
$_y = int(($oy-$min)/2);
$_x = 0;
$image->Crop(x=>$_x, y=>$_y, geometry=>$min.'x'.$min);
}


#$image->Crop(x=>$_x, y=>$_y, geometry=>'250x250');

$image->Set(quality=>85);
$image->Resize(width=>100, height=>100);
$image->Contrast();
$image->Normalize();


$n_file =~ s/image/thumbnail/;
print "Create image: ./images/$n_file\n";
$x = $image->Write("./images/".$n_file);
}




Комментариев нет:

Отправить комментарий