AltME groups: search
Help · search scripts · search articles · search mailing listresults summary
world | hits |
r4wp | 0 |
r3wp | 10 |
total: | 10 |
results window for this page: [start: 1 end: 10]
world-name: r3wp
Group: Core ... Discuss core issues [web-public] | ||
btiffin: 25-Oct-2007 | Rebol.org exif-image.r (uses exif-core.r) and has a jpeg-size function. Didn't read enough to see if it loads the whole file before it looks for the size fieldsm but I don't think Piotr's routines requires a load. | |
Oldes: 25-Oct-2007 | it would not be working if exif tag is not present.. never mind... I could probably enhance my jpg-analyse script.. decoding Start Of Frame marker, which may contain the real size info | |
Steeve: 25-Oct-2007 | f: read/binary %15.jpg get-len: [header: skip (len: to integer! as-binary cp/part header 2) ] skip-len: [:header (header: skip header len) :header] parse f [ #{FFD8} ; jpeg Header [ #{FFE0} ;JFIF header get-len ;get length of a header (2 octets) #{4A46494600} ;yeah it's a JFIF (confirmation) skip-len some [ #{FF} #{C0} ;good ! i found the length properties (print ["height" to integer! as-binary cp/part at header 6 2]) (print ["width" to integer! as-binary cp/part at header 8 2]) break | #{FF} ;don't know this header skip get-len skip-len | [end skip] ;error format ] | #{FFE1} ;EXIF header get-len ;get length of a header ;... to do [end skip] ] to end ] | |
Steeve: 25-Oct-2007 | REBOL [] parse-async: func [ file rules /local port buffer offset getf seek meta & && result ][ port: open/seek/binary file buffer: clear #{} offset: 1 getf: func [len][ offset: offset - length? buffer clear buffer append buffer copy/part at port offset len offset: offset + len ] seek: [(offset: offset + 1)] ..: func [blk] [change/part & compose/deep blk && ] parse rules meta: [ some [ &: binary! &&: (.. [buffer: (to-paren reduce ['getf length? &/1]) (&/1)]) :& 3 skip | &: 'skip &&: (.. [seek]) :& skip | &: 'get word! integer! &&: (.. [buffer: (to-paren compose/deep [getf (&/3) set [(&/2)] to integer! as-binary cp buffer]) to end]) :& 4 skip | &: string! &&: (.. [(as-binary &/1)]) :& | 'end 'skip | into meta | skip ] ] result: parse/all buffer rules close port result ] if parse-async %15.jpg [ #{FFD8} ; jpeg Header [ #{FFE0} ;JFIF header get len 2 ;get data length for the current header (2 bytes) "JFIF" ;yeah it's a JFIF (confirmation) (len: len - 6) len skip ;skip data (len) times some [ #{FFC0} ;good ! i found the length properties 2 skip ; skip length of this header skip ; filler ??? always = #{08} get height 2 get width 2 break ; finished | #{FF} skip ;skip this header get len 2 (len: len - 2) len skip | [end skip] ;error format ] | #{FFE1} ;EXIF header get len 2 ;get length of a header ;... to do [end skip] ] to end ][ ?? height ?? width ] halt | |
Group: Core ... Discuss core issues [web-public] | ||
Louis: 26-Dec-2011 | a function to sort jpeg files from a digital camea by exif date? | |
Pekr: 26-Dec-2011 | IIRC, someone did EXIF reader. Have you tried looking into rebol.org? | |
Pekr: 26-Dec-2011 | There are two scripts from Piotr Gapinski, related to EXIF. IIRC Oldes did ImageMagick wrapping,maybe it can do some EXIF stuff too ... | |
Pekr: 26-Dec-2011 | parse/all buff [thru "Create Date" thru ": " copy EXIF-create-date to newline] | |
Pekr: 26-Dec-2011 | your value is in EXIF-create-date .... | |
Oldes: 26-Dec-2011 | I have uploaded my latest EXIF-parser version at github - https://github.com/Oldes/rs/blob/master/projects/exif-parser/latest/exif-parser.r To sort files you can use for example: dir: %/e/DCIM/100CANON/ t: now/time/precise result: copy [] foreach file read dir [ error? try [ ctx-exif/parse-file dir/:file exifdate: ctx-exif/get-tag-value 306 repend result [exifdate dir/:file] ] ] sort/skip result 2 print ["sorted" (length? result) / 2 "files in" now/time/precise - t] result ;>>sorted 120 files in 0:00:00.153 |