TIP 529: Add metadata dict property to tk photo image

Login
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:

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.