I think ExifTool is easier to parse, but 'mdls' is built-in and has the additional faculty of producing a null result when named items are called.
Not unreasonable. :)
Okay. I've gotten around to writing it using the Satimage.osax:
------------------------------------------------------------------------------------------------
# » cng() : Change - Satimage.osax MODIFIED 2011-08-31 : 20:16
------------------------------------------------------------------------------------------------
on cng(findText, changeText, srcData)
change findText into changeText in srcData with regexp without case sensitive
end cng
------------------------------------------------------------------------------------------------
try
tell application "Finder"
set sel to selection as alias list
if sel ≠ {} then
set fSel to first item of sel
end if
end tell
set posixPath to POSIX path of fSel
set cmd to "mdls \\
-name kMDItemKeywords \\
-name kMDItemDescription \\
-name kMDItemFSCreationDate \\
-name kMDItemHeadline \\
-name kMDItemPixelHeight \\
-name kMDItemPixelWidth \\
-name kMDItemTitle " & quoted form of posixPath
set infoReco to do shell script cmd
set infoReco to cng("\\(null\\)", "null", infoReco)
set infoReco
to cng
("(\\()\\r *", "\\1", infoReco
) set infoReco
to cng
("\\r {4}", "", infoReco
) set infoReco to cng("[(]", "{", infoReco)
set infoReco to cng("[)]", "}", infoReco)
set infoReco to cng("=", ":", infoReco)
set infoReco
to cng
("\\A", "{", infoReco
) set infoReco
to cng
("\\Z", "}", infoReco
)
set infoReco
to cng
("\\r", ", ", infoReco
) set infoReco to run script infoReco
on error errMsg number errNum
set {cr, sep} to {return, "------------------------------------------"}
set e to sep & cr & "Error: " & errMsg & cr & sep & cr & "Error Number: " & errNum & cr & sep
beep
display dialog e
end try
------------------------------------------------------------------------------------------------