logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Description

Img  is a collection of format handlers for the Tkphoto [https://www.tcl.tk/man/tcl9.0/TkCmd/photo.html]
       image type.

       Sources and binaries of Img are available at SourceForge [https://sourceforge.net/projects/tkimg/].

       The individual formats are described in more detail on their own pages.

       bmp    Windows bitmap format.  See img-bmp.

       dted*  Digital Terrain Elevation Data format.  See img-dted.

       flir*  FLIR FPF Public Image format.  See img-flir.

       gif*   Graphics Interchange Format.  See img-gif.

       ico    Windows icon format.  See img-ico.

       jpeg   Joint Picture Experts Group format.  See img-jpeg.

       pcx    Paintbrush format.  See img-pcx.

       pixmap Pixmap image type.  While the other formats are handlers for the Tk photo image type,  this  is  a
              new image type for Tk.  See img-pixmap.

       png    Portable Network Graphics format.  See img-png.

       ppm    Portable pixmap format.  See img-ppm.

       ps*    Postscript  and  PDF  format.  Requires an external application, ghostview for its operation.  See
              img-ps.

       raw*   Raw data format.  See img-raw.

       sgi    Silicon Graphics format.  See img-sgi.

       sun    Sun raster format.  See img-sun.

       tga    Truevision Targa format.  See img-tga.

       tiff   Tagged Image File Format.  See img-tiff.

       window Tk window as photo image.  See img-window.

       xbm    X Windows Bitmap format.  See img-xbm.

       xpm    X Windows Pixmap format.  See img-xpm.

Image Metadata

       Some  image  formats  support  an  individual  set  of  metadata  dictionary  keys.   See  the  Tkphoto
       [https://www.tcl.tk/man/tcl9.0/TkCmd/photo.html] image  command  for  more  information  regarding  image
       metadata.

       This support is enabled, if Img is linked against Tk 8.7 or newer.

       The following keys are supported:

       DPI    Horizontal image resolution in dots per inch as double value.

              Supported by formats img-bmp, img-jpeg, img-pcx, img-png, img-tiff.

       aspect Aspect ratio defined as horizontal size divided by vertical size as double value.

              Supported by formats img-bmp, img-jpeg, img-pcx, img-png, img-tiff.

       numpages
              The number of pages in an image file.

              Supported by formats img-ico, img-tiff.

       All  formats  supporting  image resolution (DPI and aspect) have the following format options for writing
       these values without explicitly setting the metadata dictionary:

       -resolution-xresolution-yresolution.

       [1]    Option -resolution allows specifying both horizontal and vertical resolution values.

       [2]    If not using option -resolution, options -xresolution and -yresolution  must  both  be  specified.
              Otherwise no resolution information is written.

       [3]    Resolution  values  specified  with  any of the above options overwrite the corresponding metadata
              dictionary values.

       [4]    The  resolution values can be specified as double values as documented with function  Tk_GetPixels
              [https://www.tcl.tk/man/tcl9.0/TkLib/GetPixels.html].

       Example resolution specifications:

              1.0: 1 inch
              1i : 1 inch
              1c : 1 centimeter
              1m : 1 millimeter
              1p : 1 point

       Example  writing  PNG  image  with  horizontal  resolution  of  300 inches and vertical resolution of 200
       centimeters:

              img write out.png -format {png -resolution 300i 200c}

Matching Order

       When  reading  images  without  specifying  the format (using option -format), the match functions of the
       available formats are tried in reversed order as registered.  So, the handlers of  the  Img  package  are
       called  before the handlers of the Tk core.  The Tk core registers the following handlers: GIF, PNG, PPM,
       SVG, DEFAULT.

       In Tk 8.7 a new format handler structure (Tk_PhotoImageFormatVersion3) was introduced to handle  the  new
       metadata  information.   All old handlers (Tk_PhotoImageFormat) are called before calling the new Format3
       handlers.

       See           manual           page           of            function            Tk_CreatePhotoImageFormat
       [https://www.tcl.tk/man/tcl9.0/TkLib/CrtPhImgFmt.html] for a detailed description of the handler struture
       and matching functions.

       The resulting matching order is best explained by an example:

              package require Tk
              package require Img
              package require img::raw     (Format2Imghandler)

       Note, that the packagerequireImg command actually calls the following statements:

              package require img::window  (Format2Imghandler)
              package require img::tga     (Format2Imghandler)
              package require img::ico     (Format3Imghandler)
              package require img::pcx     (Format3Imghandler)
              package require img::sgi     (Format2Imghandler)
              package require img::sun     (Format2Imghandler)
              package require img::xbm     (Format2Imghandler)
              package require img::xpm     (Format2Imghandler)
              package require img::jpeg    (Format3Imghandler)
              package require img::png     (Format3Imghandler)
              package require img::tiff    (Format3Imghandler)
              package require img::bmp     (Format3Imghandler)
              package require img::ppm     (Format2Imghandler)

       The order of calling the match functions is therefore as follows:

              Match format raw       (Format2Imghandler)
              Match format ppm       (Format2Imghandler)
              Match format xpm       (Format2Imghandler)
              Match format xbm       (Format2Imghandler)
              Match format sun       (Format2Imghandler)
              Match format sgi       (Format2Imghandler)
              Match format tga       (Format2Imghandler)
              Match format window    (Format2Imghandler)
              Match format svg       (Format2Tkhandler)
              Match format ppm       (Format2Tkhandler)
              Match format default   (Format2Tkhandler)
              Match format bmp       (Format3Imghandler)
              Match format tiff      (Format3Imghandler)
              Match format png       (Format3Imghandler)
              Match format jpeg      (Format3Imghandler)
              Match format pcx       (Format3Imghandler)
              Match format ico       (Format3Imghandler)
              Match format png       (Format3Tkhandler)
              Match format gif       (Format3Tkhandler)

Multi-Page Images

       Some image formats support storage of multiple pages in a file.

       Supported by formats img-gif, img-ico, img-ps, img-tiff.

       A specific page can be extracted using the -index option.  Index 0 specifies the first page.

       There is currently no support for writing multi-page images.

       The number of pages of an image file can either be retrieved using metadata  key  numpages  (see  chapter
       ImageMetadata) or by checking different -index values.

       For example, GIF images can have multiple pages in one file.  The metadata dictionary key numpages is not
       supported for GIF images, as this property cannot be extracted fast.

       If you need to know the number of pages, use code like in the following example:

               proc CheckIndex { fileName fmt ind } {
                   set retVal [catch {image create photo -file $fileName -format "$fmt -index $ind"} phImg]
                   if { $retVal == 0 } {
                       image delete $phImg
                       return true
                   }
                   return false
               }

               proc GetNumPages { fileName fmt } {
                   if { [CheckIndex $fileName $fmt 1] } {
                       set ind 5
                       while { [CheckIndex $fileName $fmt $ind] } {
                           incr ind 5
                       }
                       incr ind -1
                       while { ! [CheckIndex $fileName $fmt $ind] } {
                           incr ind -1
                       }
                       return [expr { $ind + 1 }]
                   }
                   return 1
               }

               # Determine the number of pages of an animated GIF.
               set numPages [GetNumPages $imgFile "gif"]

Name

       img - Introduction to Img

Notes

       [1]    Img version 2 only works with Tcl/Tk 8.6 or newer.  If using an  older  Tcl/Tk  version,  use  the
              lastest Img 1.4 version.

       [2]    Formats  marked  with  *  are  not  loaded  when  doing  a packagerequireImg, but must be loaded
              explicitly via packagerequireimg::FORMAT.

See Also

       img, img-bmp, img-dted, img-flir, img-gif, img-ico, img-jpeg, img-pcx, img-pixmap, img-png, img-ppm, img-
       ps, img-raw, img-sgi, img-sun, img-tga, img-tiff, img-window, img-xbm, img-xpm

Synopsis

       package require Img?2.0?

________________________________________________________________________________________________________________

Value Mapping

       Some image formats support pixel values greater than storable in 8-bit integers.

       •      The following formats support 16-bit integer pixel values: img-dted, img-ppm.

       •      The following formats support floating point pixel values: img-flir, img-raw.

       To map these values to 8-bit integer values as needed for  a  Tk  photo,  two  different  algorithms  are
       implemented in Img:

       A  simple  MinMax  algorithm  and  an  advanced  AutomaticGainControl(AGC) algorithm using histogram
       equalization.

       The default for all supported formats is to use the MinMax algorithm, which determines  the  minimum  and
       maximum values of the image automatically.

See Also