@Konboi memo

主に技術に関してつらつらと。

画像変換

なんと、明日から7月とか。
2011年の半分も過ぎてしまった.....\(^o^)/

まぁ、そんなこんなで今日はPerlをほじほじしてました。
どうしてPerlなのかっていうと、先週末内定先の内定者懇談会にいって社員さんと面談していろいろお話してPerl,Js,C,Javaをやりなさいと。

そして、Perlの勉強には自分の必要、あったらいいなって思うものをつくるといいよって言われたので。

”いい意味でめんどくさがりな人になれ” 

と言われました。

で、なにか欲しいのないかなーって思ってたら、ありました!

いつもミラーレフ一眼でサークルとかの写真をとってるもんで写真を共有するのにWebにアップする時に非常に時間がかかるんですよ。
だから、コマンドひとつでアップロード様にサイズの小さい画像を生成できないかなーって思って作りました。


今回は、Imagerっていうモジュールを使って作りました。
以下がコード。
(きたね...orz)

#! /usr/bin/perl

use strict;
use warnings;
use Imager;
use FindBin;
use File::Path;
use Path::Class;

my $dir = $FindBin::Bin;
my $save_dir = dir( $dir, 'small' );

my $img = Imager->new;
my $standard_length = 800; # width or height 

#1.画像を読み込む
my @file = glob "*.JPG *.jpg";
my $file_num = @file;

if( -d $save_dir ){
}

else{
    print( 'can  not find \n' );
    print( $save_dir );
    mkpath( "small" ) or die $!;
}


for( my $i = 0; $i < $file_num ; $i++){
    print(" $i :: @file[$i] \n ");
    $img->read( file => "$dir/@file[$i]");

    my $pict_width = $img->getwidth;
    my $pict_height = $img->getheight;

    my $stand = $standard_length / $pict_width;
    my $stand_height = $pict_height * $stand;

    $img = $img->scale(
    xpixels => $standard_length,
    ypixels => $stand_height
    );

    my $save_file = file( $dir, "small", @file[$i] );
    $img->write( file => $save_file, jpegquality => 90 )
}

とりあえず、画像を小さくできた。

ただ、mainの中でforループ回してで全部やっちゃってるからなんかなぁ。

これからの改善点としては

  • jpeg以外の画像も読み込めるようにする。
  • 例外処理をきちんとする
  • 絶対パスで指定できるようにする。
  • 共通化できる所を共通化

こんなもんかな?

とりあえず、久しぶりにPerl触った。
やっぱり触らないと忘れてく。 こりゃやばいね。

でも、何か作るって楽しいわ。

こうやって色々つくっていこう。