Я унаследовал программу Perl, которая использует Image::Magick
для внесения изменений в изображения.
Код Perl
#!/usr/bin/perl
#use strict;
use warnings;
use Data::Dumper;
use Net::SMTP;
use Image::Magick;
use File::Find::Rule;
use File::stat;
use File::Type;
use File::Copy "cp";
my $maxFileSize = 400;
my $errorLog = 'C:/Users/bdmsadmin/Desktop/test/testlog.txt';
my $startDir0 = 'C:/Users/bdmsadmin/Desktop/test/img';
my $badImageTag = 'Kofax standard Multi-Page TIFF Storage Filter v3.03.000';
my $alreadyModifiedTag = 'Image Modified by xtenderImageCheck.pl for correction of incorrect scanning settings';
my $fileTypeBMP = 'image/x-bmp';
my $fileTypePDF = 'application/pdf';
my $fileTypeJPEG = 'image/jpeg';
my $fileTypeTIFF = 'image/tiff';
my $ffr = 'File::Find::Rule';
my $fileExt = '*.bin';
my $compressionGROUP4 = 'Group4';
my $compressionJPEG = 'JPEG';
my $compressionLZW = 'LZW';
my $rule = $ffr->file->name( '*.jpg', '*.jpeg', '*.tif', '*.png', '*.bin' )->start( $startDir0 );
my $warnstring = 'Exception 3';
my $warnstring2 = 'Deprecated and troublesome old-style JPEG compression mode';
my $imageComment = 'Dummy';
my $datestring = localtime();
open( ERRORLOG, ">>$errorLog" ) or die "Error opening $errorLog: $!";
while ( my $file = $rule->match() ) {
my $copy = $file;
$copy =~ s/\.bin$/.org/i;
cp( $file, $copy ) or die print "Copy failed";
my $sb = stat( $file );
if ( $sb->size > $maxFileSize ) {
print "Processing $file\n";
my $objFileType = File::Type->new();
my $fileType = $objFileType->checktype_filename( $file );
next if $fileType eq $fileTypePDF;
my $image = Image::Magick->new();
open IMAGE, ">>$file" or die "Error opening $file: $!\n";
binmode( IMAGE );
my $x = $image->ReadImage( "$file" );
if ( $x ) {
print ERRORLOG "ERROR: $file --> $x\n";
}
my $warncheck = index( $x, $warnstring );
my $warncheck2 = index( $x, $warnstring2 );
next if $x and ( $warncheck < 0 or $warncheck2 >= 0 );
my $imageType = $image->GetAttribute( 'type' );
my $imageComment = $image->GetAttribute( 'comment' );
#next if $imageComment eq $alreadyModifiedTag;
print "$image\n";
print "$imageComment\n";
print "$alreadyModifiedTag\n";
if ( $imageComment eq $alreadyModifiedTag ) {
print "$file has already been optimized. Skipping...\n";
print ERRORLOG "$file has already been optimized. Skipping...\n";
next;
}
if ( $imageType eq 'Bilevel' ) {
$image->SetAttribute( option => 'quantum:polarity=min-is-white' );
$image->SetAttribute( comment => $alreadyModifiedTag );
$image->SetAttribute( monochrome => 'true' );
$image->SetAttribute( mime => $fileTypeTIFF );
$image->SetAttribute( magick => 'tif' );
$image->SetAttribute( compression => $compressionGROUP4 );
$image->Write( filename => $file );
close( IMAGE );
undef( $image );
}
elsif ( $imageType eq 'Grayscale' ) {
$image->SetAttribute( option => 'quantum:polarity=min-is-white' );
$image->SetAttribute( comment => $alreadyModifiedTag );
$image->SetAttribute( monochrome => 'true' );
$image->SetAttribute( mime => $fileTypeTIFF );
$image->SetAttribute( magick => 'tif' );
$image->SetAttributes( compression => $compressionJPEG, quality => 60 );
$image->Write( filename => $file );
close( IMAGE );
undef( $image );
}
elsif ( $imageType eq 'TrueColor' ) {
$image->SetAttribute( option => 'quantum:polarity=min-is-white' );
print ERRORLOG "TrueColor \n";
$image->SetAttribute( mime => $fileTypeTIFF );
$image->SetAttribute( magick => 'tif' );
$image->SetAttribute( alpha => 'off' );
$image->SetAttributes( compression => $compressionLZW );
$image->SetAttribute( comment => $alreadyModifiedTag );
$image->Write( filename => $file );
close( IMAGE );
undef( $image );
}
else {
print ERRORLOG "ERROR:---> No Handler for this image type! -->File: $file of type: $imageType\n";
close( IMAGE );
undef( $image );
}
}
my $sFile = -s $file;
my $sCopy = -s $copy;
print ERRORLOG "Size $file = $sFile\n";
print ERRORLOG "Size $copy = $sCopy\n";
if ( $sFile > $sCopy ) {
print ERRORLOG "Deleting $file\n";
unlink( $file );
my $original = $file;
$original =~ s/\.org$/.bin/i;
rename( $copy, $original ) or die print ERRORLOG"Rename failed";
}
else {
print ERRORLOG "Deleting $copy\n";
unlink( $copy );
}
}
close( ERRORLOG );
open my $fileHandle0, ">>", "$startDir0/optimized.txt" or die;
print $fileHandle0 "$startDir0 optimized on $datestring\n";
close $fileHandle0;
exit 0;
Я получаю сообщение об ошибкестрока
if ($imageComment eq $alreadyModifiedTag)
Использование неинициализированного значения $ imageComment в строке eq at ...
Печать строки за две строки до того, как она выдаст мне другую ошибку
Использование неинициализированного значения $ imageComment в конкатенации (.) Или строки в ...
Когда я распечатываю переменную, она пустая, несмотря на то, что у меня естьинициализировал его (насколько я могу судить).Сотрудник, более опытный в Perl, предложил мне не использовать strict
, но это не помогло.Я почти уверен, что это как-то связано с областью действия, но я просто не знаю достаточно Perl, чтобы понять это.Похоже, что это в объеме, но я не могу заставить его работать.Я попытался добавить my
и посмотрел похожие посты, но не могу понять.Любая помощь приветствуется.