Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Need a RegExp for Images

by BlenderHead (Novice)
on Jul 12, 2009 at 02:36 UTC ( #779295=perlquestion: print w/ replies, xml ) Need Help??
BlenderHead has asked for the wisdom of the Perl Monks concerning the following question:

Hello Everyone:

Am not very good with writing RegExps, but I need one that will identify .JPG's.

Can anyone give me a snippet that will work?

Thanks,

BH

Comment on Need a RegExp for Images
Re: Need a RegExp for Images
by jbt (Chaplain) on Jul 12, 2009 at 03:38 UTC
    if ($filename =~ m/\.jpe?g$/i) { print ("yep, it is a jpg!\n"); }
Re: Need a RegExp for Images
by graff (Chancellor) on Jul 12, 2009 at 04:58 UTC
    According to the "Useful tips" section (on page 7) of the official specs, you should be able to read the first 11 bytes of the file and match this pattern:
    /\xff.\xff...JFIF\x0/
    Based on looking at a small number of "*.jpg" files I happen to have uploaded from a camera (via "iPhoto", which may have been involved in "updating" some of those pictures after the upload), I would actually change that to:
    /\xff.\xff...(?:JFIF|Exif)\x0/
    And apparently, you might expect "JFXX" as well. But frankly, I'd be content to trust the file name, and so would focus on the first reply above.

    UPDATE: The above assumes that the file is being read in :raw mode (what we commonly understand as the default behavior of doing binmode FH). Also, I agree with what afoken says below: use a module to validate jpeg files, in case there is any doubt about their validity.

      But frankly, I'd be content to trust the file name, and so would focus on the first reply above.

      This may be a good idea when you can trust the data source, i.e. when you work with your own files. In a network context (CGI, mod_perl, e-mail, ...), relying on meta data (name, MIME type, ...) sent from a foreign computer opens a big security hole. The only safe way to verify a file in that context is to read it and test that it matches the specification. There are several modules on CPAN for that job. For images, Image::Size may be a good strating point.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://779295]
Approved by GrandFather
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (12)
As of 2014-08-27 20:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (252 votes), past polls