블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2009.01.05 15:14

[ Perl ] 간단한 그림파일 리사이즈 작업


 오픈을 대비해서 이런저런 준비를 하는 도중에 그림파일을 종류별로 바꿔야하는 일이 발생했습니다.
 이럴때는 Image::Magick 겠지 하고 모듈을 검색해본 결과 역시 "정답" 이었습니다.
 아쉽게도 Mac 에서는 설치를 실패했는데, 시간상 알아보지 못하고 그냥 우분투에서 aptitude 로 의존모듈등을 한꺼번에 설치해버렸습니다.

$ sudo aptitude install perlmagick

 작업은 간단합니다. 어떤 URL 의 HTML 컨텐츠 상의 그림파일을 뽑아서 URL 에 맞게 해당 디렉토리에 집어넣고, 그 파일을 불러와서 Imagic::Magick 로 리사이즈하면 되는 것 뿐입니다.
 
  1. use strict;
  2. use warnings;
  3. use Image::Magick;
  4. use LWP::Simple;

  5. my @column = qw/id blah1 blah2 blah3 html_content/;
  6. open my $fh, '<', 'file.csv' or die 'WTF?';
  7. while(<$fh>) {
  8.  chomp;
  9.  my $i = 0;
  10.  my @data = split ',', $_;
  11.  my %row = map { $_ => $data[$i++] } @column;
  12.  $row{html_content} =~ s/src="([^"]+)"/process($1)/gie;
  13.  # do something
  14. }
  15.  
  16. sub process {
  17.   my $url = shift;
  18.  
  19.   my ($dir, $name) = $url =~ /([/]+)¥/(.+¥.(?:gif|jpg))$/i;
  20.  
  21.   save_image($url, $dir, $name);
  22.   convert_image($dir, $name);
  23.   return convert_path($dir, $name);  
  24. }
  25.  
  26. sub save_image {
  27.   my ($url, $dir, $name) = @_;
  28.  
  29.   mkdir($dir) unless -d $dir;
  30.   my $content = LWP::Simple::get($url);
  31.   open my $file, '>', "$dir/$name";
  32.   binmode $file; # binmode 설정
  33.   print $file $content;
  34.   close $file;
  35. }
  36.  
  37. sub convert_image {
  38.   my ($dir, $name) = @_;
  39.  
  40.   my $image = Image::Magick->new;
  41.   $image->Read("$dir/$name");
  42.   $image->Resize(
  43.     width => 200,
  44.     height => 150,
  45.   );
  46.   $image->Write($name);
  47. }
  48.  
  49. sub convert_path {
  50.   my ($dir, $name) = @_;
  51.  
  52.   my $path = "http://blah.blah.jp/blah/image/$dir/$name";
  53.   return 'src="'.$path.'"';
  54. }

 작업한 perl 스크립트에서 간략하게 추려봤습니다. 역시나 단발성 작업이라서 그런지 패키지로 만들지 않았지만, 장기적으로 사용될 작업이라면 좀 더 깔끔하게 코드를 정리하는 것도 좋을 겁니다.
  Image::Magick 로는 리사이즈 말고도 이런저런 아름다운 일을 할 수 있으니, 그림조작을 위해서라면 반드시 참고해볼만 하다고 생각합니다. (다 아는얘기;;;)

 - CPAN : Image::Magick
신고
TOTAL 466,848 TODAY 22

티스토리 툴바