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 ( [id://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

Replies are listed 'Best First'.
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". ;-)
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"); }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
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?Last hourOther CB clients
Other Users?
Others about the Monastery: (8)
As of 2024-04-18 15:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found