ディレクトリをスキャンし、imgsizehttp://dktools.sourceforge.net/imgsize.htmlを使用してpngファイルの幅などを取得するPerlスクリプトが機能してい ます。このプロセスを高速化するためのヒントはありますか(現在、1000ファイルごとに平均5分です)?コードをなんらかの方法で最適化できるかどうか疑問に思っていました。ありがとう。
use strict;
use warnings;
use File::Find;
my @files;
my $directory = '/Graphics/';
my $output_file = '/output_file';
my $max_height = 555;
my $count = 0;
open ( OUTPUT, '>>', $output_file );
find( \&wanted, $directory );
foreach my $file ( @files ) {
if ( $file =~ /\.png$/ ) {
my $height = `imgsize $file | cut -d\'\"\' -f4`;
if ( $height > $max_height ) {
print OUTPUT "$file\n";
}
$count++;
my $int_check = $count/1000;
if ( $int_check !~ /\D/ ) {
print "processed: $count\n";
}
}
}
print "total: $count\n";
close ( OUTPUT );
exit;
sub wanted {
push @files, $File::Find::name;
return;
}
解決策:Image::Info
モジュールを使用できたことがわかりました。5分ごとに1000imgを処理することから12秒ごとに処理するようになりました。興味のある方は、関連するコードスニペットを次に示します。
use Image::Info qw(image_info);
foreach my $file ( @files ) {
if ( $file =~ /\.png$/ ) {
my $output = image_info($file);
my $height = ${$output}{height};
if ($height > $max_height) {
print OUTPUT "$file\n";
}
$count++;
my $int_check = $count/1000;
if ( $int_check !~ /\D/ ) {
print "processed: $count\n";
}
}
}