On Sat, 11 Dec 2004 10:53:19 +0100, Fredrik Lundh wrote: > "flamesrock" <[EMAIL PROTECTED]> wrote: > >> As a newbie to the language, I have no idea where to start..please bare >> with me.. >> >> The simcity 4 savegame file has a png image stored at the hex location >> 0x80. What I want to extract it and create a file with the .png >> extension in that directory. >> >> Can somebody explain with a snippet of code how I would accomplish >> this? I've looked around but the information is too vague and I don't >> know how to start. > > there are *many* ways to ignore the first 128 bytes when you read a file > (you can seek to the right location, you can read 128 bytes and throw them > a way, you can read one byte 128 times and throw each one of them away, > you can read all data and remove the first 128 bytes, etc). > > here's a snippet that understands the structure of the PNG, and stops copying > when it reaches the end of the PNG: > > import struct > > def pngcopy(infile, outfile): > > # copy header > header = infile.read(8) > if header != "\211PNG\r\n\032\n": > raise IOError("not a valid PNG file") > outfile.write(header) > > # copy chunks, until IEND > while 1: > chunk = infile.read(8) > size, cid = struct.unpack("!l4s", chunk) > outfile.write(chunk) > outfile.write(infile.read(size)) > outfile.write(infile.read(4)) # checksum > if cid == "IEND": > break > > to use this, open the input file (the simcity file) and the output file > (the png file you want to create) in binary mode, use the "seek" > method to move to the right place in the simcity file, and call "pngcopy" > with the two file objects. > > infile = open("mysimcityfile", "rb") > infile.seek(0x80) > outfile = open("myimage.png", "wb") > pngcopy(infile, outfile) > outfile.close() > infile.close() > > hope this helps! > > </F>
Thanks! And what a pleasant surprise! I just noticed you authored the book I've been studying - Python Standard Library. Its awesome ;) Oh- and Sorry for the late response. Google groups wouldn't allow me to followup. I'm using pan now. -- http://mail.python.org/mailman/listinfo/python-list