Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Need a RegExp for Images

by graff (Chancellor)
on Jul 12, 2009 at 04:58 UTC ( [id://779308]=note: print w/replies, xml ) Need Help??


in reply to Need a RegExp for Images

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.

Replies are listed 'Best First'.
Re^2: Need a RegExp for Images
by afoken (Chancellor) on Jul 12, 2009 at 06:04 UTC
    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". ;-)
        Thank you, all.

        :)

        BH

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://779308]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-04-18 05:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found