我有一个工作 perl 脚本,它扫描一个目录并使用 imgsize http://dktools.sourceforge.net/imgsize.html来获取 png 文件的宽度等。有没有人有任何加快这个过程的提示(现在,每 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 分钟处理 1000 个图像变为每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";
}
}
}