in reply to Question: module to grab file information??
Depending on your task you (is it getting image size by chance?) you may find a module like Image::Size or Image::Info does the trick. If you want to see how its done here it is in Perl. Essentially just read the header and see what it matches, then unpack the size data.
#!/usr/bin/perl -w use strict; sub image_size { return unless $_[0]; my ($width, $height, $sig); if ( $_[0] =~ m/^GIF8..(....)/s ) { $sig = 'GIF'; ($width, $height) = unpack( "SS", $1 ); } elsif ( $_[0] =~ m/^^\xFF\xD8.{4}JFIF/s ) { $sig = 'JPEG'; ($height,$width) = unpack( "nn", $1 ) if $_[0] =~ /\xFF\xC0... +(....)/s; } elsif ( $_[0] =~ /^\x89PNG\x0d\x0a\x1a\x0a/ ) { $sig = 'PNG'; ($width, $height) = unpack( "NN", $1 ) if $_[0] =~ /IHDR(.{8}) +/s; } elsif ( $_[0] =~ /BM.{16}(.{8})/s ) { $sig = 'BMP'; ($width, $height) = unpack( "LL", $1); } return $width, $height, $sig; } for my $img ( qw( c:/sample.bmp c:/sample.jpg c:/sample.gif c:/sample. +png) ) { my $data = get_file($img); my @res = image_size($data); print "$img $res[2] width $res[0] height $res[1]\n"; } sub get_file { open my $fh $_[0] or die $!; binmode $fh; local $/; <$fh> } __END__ c:/sample.bmp BMP width 512 height 384 c:/sample.jpg JPEG width 100 height 149 c:/sample.gif GIF width 110 height 58 c:/sample.png PNG width 256 height 192
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Question: module to grab file information??
by lihao (Monk) on Apr 30, 2008 at 16:52 UTC | |
by tachyon-II (Chaplain) on Apr 30, 2008 at 17:34 UTC |