It is hard to determine at runtime what image formats image create photo id -format ?? can handle. image create photo id -format "x" does not even return an error until a file is tried, even if the file is empty. This is used below. See also Img for what should be supported.
#!/usr/bin/env wish
# abc 2015 / abc @ irc.freenode.net
# see https://wiki.tcl-lang.org/1404 for what should be supported but isn't yet (8.5 only for now)
# Hack to get the installed image type handlers short name (not for image create) (man n photo)
# V0: tested in 8.5; Returns: list [0 imgtype0 imgtype1 ...] or [-1 errmsg]
proc GetPhotoFormats {{dummyfile "/tmp/dummy.img"}} { ;# arg must be a writable non existing file
if {[file exists $dummyfile]} {return [list -1 "won't delete $dummyfile"]}
catch {exec rm $dummyfile}
if {[catch {exec touch $dummyfile} err]} {return [list -1 $err]}
set img GetPhotoFormatsDummyImg ;# long unique photo object name
set r 0; foreach t [lsort {bmp pcx ico gif png xbm png jpg ppm xpm tiff tga pixmap ps tga sgi sun}] {
catch {image create photo $img -format $t -file $dummyfile;image delete $img} err
if {[regexp "couldn't recognize data in image file " $err]} {
lappend r $t
}
}
catch {exec rm $dummyfile}
return $r
}
puts [GetPhotoFormats]
exit 0PYK 2015-07-18: Small modification to make the returned value correspond to the documentation.