Code critique please

kai.peters at gmail.com kai.peters at gmail.com
Wed Apr 8 00:43:23 CEST 2015


I just wrote this bit (coming from Pascal) and am wondering how seasoned Python programmers would have done the same? Anything terribly non-python?

As always, thanks for all input.

K



"""
 Creates a PNG image from EPD file
"""

import os, sys
from PIL import Image, ImageFont, ImageDraw

# -----------------------------------------------------------------------------
def RenderByte(draw, byte, x, y):

    blist = list(bin(byte).lstrip('0b')) # turn byte into list with 8 elements, 
    c = 0                                # each representing one bit
    for bit in blist:                   
        if bit:                
            draw.point((x + c, y), fcolor)
            
        c += 1
    return

# -----------------------------------------------------------------------------
def EPD_2_Image(edpfilename, imagefilename):
    
    # get out of here if EPD file not present
    if not os.path.isfile(epdfilename):
        print 'file not found: ' + edpfilename
        return
    
    # is this a valid EPD file?
    filesize = os.path.getsize(epdfilename)
    if (((xdim / 8) * ydim) + header) <> filesize:
        print 'incorrect file size: ' + edpfilename
        return
    
    # blow old destination file away 
    if os.path.isfile(imagefilename):
        print 'deleting old dest. file: ' + imagefilename
        os.remove(imagefilename)

    print 'processing...'
    
    # set up PIL objects
    img  = Image.new('1', (xdim, ydim), bcolor)   # '1' = Bi-tonal image
    draw = ImageDraw.Draw(img)
    
    # read entire EPD file into byte array (without the header)
    content = bytearray(open(epdfilename, 'rb').read())[16:] 
     
    # image coord origin at top/left according to PIL documentation
    pos = 0
    for y in range(ydim): 
        x = 0
        for byte in range(xdim / 8):   # 8 pixels 'stuffed' into one byte
            RenderByte(draw, content[pos], x, y)
            pos += 1           
            x   += 8

    img.save(imagefilename)   # format is inferred from given extension
    print 'done.'
    
    return
# -----------------------------------------------------------------------------
    
xdim   = 1024
ydim   = 1280
header = 16
black  = 0
white  = 1
bcolor = black
fcolor = white

epdfilename   = 'c:\\temp\\drawtest2.epd'
imagefilename = 'c:\\temp\\drawtest2.png'

EPD_2_Image(epdfilename, imagefilename)



More information about the Python-list mailing list