Author: Harald Oehlmann <[email protected]>
State: Draft
Type: Project
Vote: Pending
Created: 07-Dec-2018
Keywords: Tk, image
Tcl-Version: 8.7
Tk-Branch: tip-529-image-metadata
Abstract
An additional property is proposed for photo images to hold image metadata:
myimage cget -metadata
myimage configure -metadata [dict create dpi 300.0]
Rationale
Image files may contain a lot of metadata like resolution, comments, GPS location etc. This metadata should be accessable and setable for the following aims:
- Make it available after image load on script level
- Make it setable within the image
- Write it in the image file.
- Prepare eventual automations on automatic scaling on screen resolution
This TIP specially targets the resolution (DPI) value of the image.
The image resolution included in an image file is crucial for its usage, as many applications (word & co.) use this field to calculate a default size. One may enjoy, that image files used in pdf4tcl are automatically scaled at the right resolution (e.g. the resolution saved in the image file).
This information is included in png files (supported by tk core) and many other image formats included in the Img patch.
I authored an extension to the Img patch to specify the dpi field of a bmp file on file writing. The syntax was accorded with Jeff Hobbs:
myimage write file.bmp -format [list bmp -resolution 300 i]
This may be expressed (when all packages are adopted) by:
myimage configure -metadata [dict create dpi 300.0]
myimage write file.bmp
Specification
Metadata dict
The propery "-metadata" is added to each image file. It contains a dict, where the keys are specified for each image format.
The following default keys are used, if the corresponding data is present:
key | description | example image formats |
---|---|---|
dpi | Image resolution | png |
comment | Text comment | gif |
xmp | xmp image data | png |
Commands
The following commands are directly concerned:
image create photo myimage -metadata $metadict
myimage cget -metadata
myimage configure -metadata $metadict
It is also ok to store application data related to the image within the property dict. A widget may store special properties.
Any load and save command may use the content of the metadata dict. This may be an ongoing process, specially within the Img patch.
The commands are:
image create photo myimage -file myfile.bmp
myimage configure -file myfile.bmp
myimage write file.bmp
The image create and file load functions recreate the metadata dict. Any current contents is lost.
The write file commands uses any dict keys it knows. Any unknown dict keys are ignored.
Implementation
The current implementation is only a sketch in my brain. I hope, that an image handler can set the options after reading and a binary extension of the image handlers is not necessary. Nevertheless, I don't know jet.
Any help and comments are appreciated. I am realy a novice here.
Implementation may start soon with the tag tip-529-image-metadata.
Copyright
This document has been placed in the public domain.