Version 6 of Reading GIF image dimensions

Updated 2004-04-30 21:31:50

From a news:comp.lang.tcl posting by Berry Kercheval < mailto:[email protected] >:

And this works for simple GIF files:

 proc gifsize {name} {
    set f [open $name r]
    fconfigure $f -translation binary
    # read GIF signature -- check that this is 
    # either GIF87a or GIF89a 
    set sig [read $f 6]
    switch $sig {
        "GIF87a" -
        "GIF89a" {
            # do nothing
        default {
            close $f
            error "$f is not a GIF file"
    # read "logical screen size", this is USUALLY the image size too.
    # interpreting the rest of the GIF specification is left as an exercise
    binary scan [read $f 2] s wid
    binary scan [read $f 2] s hgt
    close $f

    return [list $wid $hgt]

It leaked channels. Added some missing closes 11-jan-2002, Dave Griffin is a reference.

MG Apr 30 2004 - Since GIF support is built into Tcl, could you not just do

 catch {package require Img};# allow for jpeg/png/etc support, if possible
 proc imageSize {file {format ""}} {

  if { [catch {image create photo -file $file -format $format} img] } {
       if { $format == "" } {
            set form ""
          } else {
            set form "$format "
       error "'$file' is not a recognisable ${form}image"
  set info [list [image width $img] [image height $img]]
  image delete $img
  return $info;
 };# imageSize

 % imageSize ./path/to/image.gif
 % imageSize ./page/to/other/image.jpeg

See also Reading JPEG image dimensions and Reading PNG image dimensions. Category Graphics