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
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
Peter Newman 1 May 2004:
DKF: A reason for not using Tk to read the GIF image dimensions is if you are in a situation where you don't have a display (e.g. in a CGI script.)
Peter Newman 1 May 2004: That's true DKF. So an enhanced gifsize that did the job properly would be quite useful on this page. I did that many years ago in Forth and 80x86 Assembler - but I'm just to busy to convert it to Tcl (even if I could find it). But I don't think we need bother - because TclMagick doesn't need Tk - and surely it has the functionality in there. There seems to be ReadImage and GetImageInfo functions. But the docs are so complicated, I'm still not entirely sure whether it can do the job. Maybe someone familar with TclMagick can confirm whether or not it'll read GIF image dimensions (and if so, some sample code please:-).
Duoas 7 July 2006: