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");