30 July 2011

(Perl) jpeg画像のサムネイルを削除、または回転する

jpeg画像ファイルにサムネイルが存在する場合、それを削除するスクリプト

#!/usr/bin/perl use warnings; use strict; use Image::MetaData::JPEG; # ファイル名のユーザ入力 print("Delete jpeg thumbnail\ntarget file : "); my $filename = <>; chomp($filename); unless(-f $filename || -w $filename){ die("file not exist or readonly\n"); } my $image = new Image::MetaData::JPEG($filename) or die("file open error\n"); my $thumbnail = $image->get_Exif_data('THUMBNAIL') or die("original file has no thumbnail\n"); $image->set_Exif_data(\ '', 'THUMBNAIL'); $image->save($filename); print("done\n");

jpeg画像にサムネイルがある場合、それを回転するスクリプト

(サムネイルを、一時ファイルに保存して、それをImageMagickで回転している)

#!/usr/bin/perl use warnings; use strict; use Image::MetaData::JPEG; use Image::Magick; use File::Temp; # ファイル名のユーザ入力 print("Rotate jpeg thumbnail\ntarget file : "); my $filename = <>; chomp($filename); unless(-f $filename || -w $filename){ die("file not exist or readonly\n"); } # 回転方向のユーザ入力 print("select rotation (1:90deg, 2:180deg, 3:270deg) : "); my $rot = <>; chomp($rot); unless($rot == '1' || $rot == '2' || $rot == '3'){ die("rotation flag is out of range\n"); } # 現在のサムネイル画像を、一時ファイルに保存する my $image = new Image::MetaData::JPEG($filename) or die("file open error\n"); my $ref_img = $image->get_Exif_data('THUMBNAIL') or die("original file has no thumbnail\n"); my $image_thumb = new Image::MetaData::JPEG($ref_img); my (undef, $temp_filename) = File::Temp::tempfile(SUFFIX => '.jpg', OPEN => 0); unless(defined($image_thumb->save($temp_filename))){ die("temp file ".$temp_filename." write error\n"); } $image_thumb = undef; # 一時ファイルを回転させる my $im = Image::Magick->new(); if($im->Read($temp_filename)){ die("read temp error\n"); } if($rot == 1){ $im->Rotate(degrees=>90.0); } if($rot == 2){ $im->Rotate(degrees=>180.0); } if($rot == 3){ $im->Rotate(degrees=>270.0); } if($im->Write($temp_filename)){ die("write temp error\n"); } $im = undef; # サムネイルを書き込む $image_thumb = new Image::MetaData::JPEG($temp_filename) or die("file ".$temp_filename." open error\n"); $image->set_Exif_data($image_thumb, 'THUMBNAIL'); unless(defined($image->save($filename))){ die("save error\n"); } print("done\n");