proc write_png_comment {file keyword text} { set fh [open $file r+] fconfigure $fh -encoding binary -translation binary -eofchar {} if {[read $fh 8] != "\x89PNG\r\n\x1a\n"} { close $fh; return } while {[set r [read $fh 8]] != ""} { binary scan $r Ia4 len type if {$type == "IDAT"} { seek $fh -8 current set pos [tell $fh] set data [read $fh] seek $fh $pos start set size [binary format I [string length "${keyword}\x00${text}"]] puts -nonewline $fh "${size}tEXt${keyword}\x00${text}\x00\x00\x00\x00$data" close $fh return } seek $fh [expr {$len + 4}] current } close $fh return -code error "no data section found" }
--AFDoes not calculate the crc for the comment chunk. Todo: add crc obviously (maybe using tcllib crc package).