From a news:comp.lang.tcl posting by Berry Kercheval < mailto:berry@kerch.com >: 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 ---- http://www.onicos.com/staff/iz/formats/gif.html 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]