open 只接受文件句柄,不接受标量。 因此使用 IMAGE
而非 $IMAGE
如果您尝试进行读取操作,这将在以后造成麻烦。
$n = read IMAGE, $data, 4;
从文件中获取数据。
扩展之前的代码:
use Image::ExifTool;
my $exifTool = new Image::ExifTool;
$filename = $ARGV[0];
open( my $IMAGE, $filename ) || die "Can't Open $filename\n";
binmode($IMAGE);
$infob = $exifTool->ImageInfo($IMAGE);
foreach ( keys %$infob ) {
print "$_ => $$infob{$_}\n";
}
$n = read $IMAGE, $data, 2;
printf ("read %d bytes: [%s]\n", $n, $data);
$ret = close($IMAGE);
print "close returned $ret\n";
给出这个:
GreenMask => 0x0000ff00
BMPVersion => Windows V4
NumColors => 2
PixelsPerMeterX => 3938
RedMask => 0x00ff0000
Planes => 1
FileType => BMP
<snip>
read 2 bytes: [^@^@]
close returned 1
请注意,读取操作未正常工作--应该返回位图文件的前两个字节的BM。原因是打开调用不接受标量,而是接受文件句柄。
use Image::ExifTool;
my $exifTool = new Image::ExifTool;
$filename = $ARGV[0];
open( IMAGE, $filename ) || die "Can't Open $filename\n";
binmode(IMAGE);
$infob = $exifTool->ImageInfo($filename);
foreach ( keys %$infob ) {
print "$_ => $$infob{$_}\n";
}
$n = read IMAGE, $data, 2;
printf ("read %d bytes: [%s]\n", $n, $data);
$ret = close(IMAGE);
print "close returned $ret\n";
这个是:
这提供了:
Megapixels => 0.994
Directory => .
ImageWidth => 850
ImageSize => 850x1169
BitDepth => 1
<snip>
FilePermissions => rw-r--r--
Compression => None
NumColors => 2
FileName => staves.bmp
BlueMask => 0x000000ff
read 2 bytes: [BM]
close returned 1
读取操作正常,ExifTool 也正常工作。
(希望格式没问题。我是新手……)
.=
,并且你对它的注释是错误的。.
是连接符。.=
是连接并将结果分配给左侧的变量。你可能打算通过print
语句的副作用来改变$file
的值,但我怀疑这一点。 - Ven'Tatsuread
еә”иҜҘдҪҝз”ЁIMAGE
ж–Ү件еҸҘжҹ„иҖҢдёҚжҳҜFILE
ж–Ү件еҸҘжҹ„гҖӮ - hexcoder