David Harris's Technology Blog

ColdFusion, Flex, and other stuff...   (and 338,183 hours, 14 mins in to my plan for global domination)

Search:

Calendar:

Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Subscribe:

Enter your email address to subscribe to this blog.

Archives By Subject:

Tags:

action script adobe air ajax cfug coldfusion flash flex frameworks free software fxug general jpgmetadatareader mac off topic opensource papervision spry

Recent Entries:

No recent entries.

Top Posts:

Recent Comments:

Top Commenters:

My Links:

RSS:


Introducing JpgMetadataReader.cfc V0.2

Just when you think you are being clever, you find there is someone who has already been cleverer (is that a word?) than you!

I asked Mr Google about ColdFusion and EXIF and he told me about this: http://www.leavethatthingalone.com/blog/index.cfm/2006/5/16/Using-ColdFusion-to-Read-EXIF-Information-from-JPEGs

The same Java class was being used, but the really clever thing here is that you don't need to add that class to the lib dir/class paths in CF.

After reading this, and thinking how I plan to use my JpgMetadataReader.cfc, I have made to following changes:

- the init function now has the optional argument "JpegMetadataReader", which is "An instantiated object of com.drew.imaging.jpeg.JpegMetadataReader" (that's the hint) If you do not pass this in, it will attempt to create the java object, and if it is located in the lib/class path, you'll be fine :-)

- added the functions "getITPCKeys" and "setITPCKeys". These functions are used to define a comma delimited list of keys that MUST be returned in the result struct. The struct keys are inited with a value of "" (empty string) The default list is "Caption/Abstract,Keywords,Credit,Copyright Notice,Object Name" and is dirived from http://www.controlledvocabulary.com/imagedatabases/iptc_naa.html#IPTCchart

- added the optional argument "type" to "getMetaDataStruct". This will return only the type of meta data you specify. eg:

<cfset stMetaData   = oMetaData.getMetaDataStruct("c:\my\picture\here.jpg","exif")>
...will only return "exif" meta data. If this argument is not provided or is an empty string, any avalible meta data will be returned. If a non-existant type is provided, you will end up with a empty Struct.

So, enough info, now for some code:

<!---
...code here to create the java object...

eg:
MyJpegMetadataReaderJavaObject = loader.create("com.drew.imaging.jpeg.JpegMetadataReader");

...if you are using Mark Mandle's Java loader (http://javaloader.riaforge.org/)

--->


<cfset oMetaData   = createObject("component","org.harris.JpgMetadataReader").init(MyJpegMetadataReaderJavaObject)>

<cfset stMetaData   = oMetaData.getMetaDataStruct("c:\my\picture\here.jpg")>

<cfdump var="#stMetaData#">

The only difference here from the initial code snippet is that I have provided the Java class "com.drew.imaging.jpeg.JpegMetadataReader" in the variable "MyJpegMetadataReaderJavaObject"

What is really cool about the JavaLoader is that you can load ANY java class!

Enjoy!

Related Blog Entries

Comments