Skip to content

Instantly share code, notes, and snippets.

@mipsparc mipsparc/pngenccolour.py
Last active Aug 29, 2015

Embed
What would you like to do?
簡易カラーPNGエンコーダ
#coding:utf-8
#Make a PNG file
IMAGE = (
'cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54ffffffffffffffffffffffffffffffffffffffffffffffffcdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffffffffffffffffffffffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54ffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54ffffffffffffffffffffffffcdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54',
'cdbc54ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdbc54',
'cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54cdbc54'
)
outname = 'test.png'
import struct
import binascii
import zlib
from math import ceil
import codecs
def crcMaker(data):
return binascii.crc32(data)
def chunkMaker(name, chunkData):
CRC = crcMaker(name + chunkData)
body_len = len(chunkData)
chunk = struct.pack('> I 4s {}s I'.format(body_len),
body_len, name, chunkData, CRC)
return chunk
def hexize(data):
return codecs.decode(data,'hex')
data = bytes()
#header
data += bytes((0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A))
#IHDR
width = len(IMAGE[0])//6
height = len(IMAGE)
depth = 8
colourType = 2
compress = 0
filterType = 0
adam7 = False
chunkData = struct.pack('> I I B B B B ?',
width, height, depth, colourType, compress, filterType, adam7)
data += chunkMaker(b'IHDR', chunkData)
#IDAT
filteredImage = bytes()
filterMode = b'\x00'
inputLine = b''.join([filterMode+hexize(l) for l in IMAGE])
chunkData = zlib.compress(inputLine)
data += chunkMaker(b'IDAT', chunkData)
#IEND
data += chunkMaker(b'IEND', b'')
with open(outname, 'wb') as f:
f.write(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.