Fix indentation

This commit is contained in:
Florent 2013-10-16 22:31:30 +02:00 committed by Florent Fourcot
commit 64ff95396c
2 changed files with 117 additions and 111 deletions

View file

@ -22,66 +22,73 @@
# [6] http://code.google.com/p/casadebender/source/browse/python/PIL/Win32IconImagePlugin.py # [6] http://code.google.com/p/casadebender/source/browse/python/PIL/Win32IconImagePlugin.py
# [7] http://www.osphp.com.cn/read.php/290.htm # [7] http://www.osphp.com.cn/read.php/290.htm
from PIL import Image from PIL import Image
import sys import sys
import os import os
# data: a size*size of (r,g,b,t) tuples, t for tansparency(if True) # data: a size*size of (r,g,b,t) tuples, t for tansparency(if True)
# (r,g,b,a) if bpp is 32 # (r,g,b,a) if bpp is 32
# size: could be 16 or 32 or 48 or 64, other value NOT supported # size: could be 16 or 32 or 48 or 64, other value NOT supported
# bpp: bits per pixel, could *only* be 24 or 32! # bpp: bits per pixel, could *only* be 24 or 32!
# return: an "array" of BYTES which, if write to file, is a size*size ico file # return: an "array" of BYTES which, if write to file, is a size*size ico file
def genico(data, size=16, bpp=24): def genico(data, size=16, bpp=24):
from array import array from array import array
a = array('B') a = array('B')
#header(ref1&5) #header(ref1&5)
a.extend((0,0, 1,0, 1,0)) #reserved*2, icon,0, 1 image per-file,0 a.extend((0,0, 1,0, 1,0)) #reserved*2, icon,0, 1 image per-file,0
#directory(ref1&5&7) #directory(ref1&5&7)
imglen = 40+size*(size*3 + (size+16)/32*32/8) #image-part length in bytes # image-part length in bytes
#!hack! AND bits align to 32 bits per line # !hack! AND bits align to 32 bits per line
#!shit! MSDN says nothing about this # !shit! MSDN says nothing about this
if bpp == 32: imglen = 40+size*(size*3 + (size+16)/32*32/8)
imglen += size*size #1 more byte for alpha value of each pixel
a.extend((size,size, 0,0, 1,0, bpp,0)) #w,h, reserved*2, 1plane*2, bpp*2 if bpp == 32:
a.extend((imglen&0xff,imglen>>8,0,0, 22,0,0,0)) #bitmap-size*4,22B-offset*4 imglen += size*size #1 more byte for alpha value of each pixel
#image BITMAPINFOHEADER(ref5) a.extend((size,size, 0,0, 1,0, bpp,0)) #w,h, reserved*2, 1plane*2, bpp*2
a.extend((40,0,0,0)) #size of data(contains header)*4 a.extend((imglen&0xff,imglen>>8,0,0, 22,0,0,0)) #bitmap-size*4,22B-offset*4
a.extend((size,0,0,0, size*2,0,0,0))#w*4, (h+h)*4 (!shit hack! XOR+AND) #image BITMAPINFOHEADER(ref5)
a.extend((1,0, bpp,0, 0,0,0,0, 0,0,0,0)) #1 plane*2, 24 bits*2, no compress*4, rawBMPsize(no compress so 0)*4 a.extend((40,0,0,0)) #size of data(contains header)*4
a.extend((0,1,0,0, 0,1,0,0)) #horizontal*4/vertical*4 resolution pixels/meter(WTF?) a.extend((size,0,0,0, size*2,0,0,0))#w*4, (h+h)*4 (!shit hack! XOR+AND)
a.extend((0,0,0,0, 0,0,0,0)) #colors fully used, all are important a.extend((1,0, bpp,0, 0,0,0,0, 0,0,0,0)) #1 plane*2, 24 bits*2, no compress*4, rawBMPsize(no compress so 0)*4
#!no planes a.extend((0,1,0,0, 0,1,0,0)) #horizontal*4/vertical*4 resolution pixels/meter(WTF?)
#image content(ref1&5), XOR+AND bitmaps a.extend((0,0,0,0, 0,0,0,0)) #colors fully used, all are important
AND = array('B') #!no planes
vand = 0 #image content(ref1&5), XOR+AND bitmaps
vcnt = 0 AND = array('B')
#remember that bitmap format is reversed in y-axis vand = 0
for x in range(size-1,-1,-1): vcnt = 0
for y in range(0, size): #remember that bitmap format is reversed in y-axis
b,g,r,t_or_a = data[y*size+x] for x in range(size-1,-1,-1):
a.extend((r,g,b)) for y in range(0, size):
if bpp == 32: b,g,r,t_or_a = data[y*size+x]
a.append(t_or_a) a.extend((r,g,b))
vcnt+=1 if bpp == 32:
vand<<=1 a.append(t_or_a)
if (bpp==24 and t_or_a) or (bpp==32 and t_or_a<128): vcnt+=1
vand |= 1 vand<<=1
if vcnt==8: if (bpp==24 and t_or_a) or (bpp==32 and t_or_a<128):
AND.append(vand) vand |= 1
vcnt=0 if vcnt==8:
vand=0 AND.append(vand)
#!hack! AND bits align to 32 bits per line, !shit! MSDN says nothing about this vcnt=0
AND.extend([0] * ((32-size%32)%32/8)) vand=0
a.extend(AND) #!hack! AND bits align to 32 bits per line, !shit! MSDN says nothing about this
return a AND.extend([0] * ((32-size%32)%32/8))
a.extend(AND)
return a
# x,y indicate the hotspot position # x,y indicate the hotspot position
# simply set the type/hotspot(x&y) after generates the icon # simply set the type/hotspot(x&y) after generates the icon
def gencur(data, size=16, bpp=24, x=0, y=0): def gencur(data, size=16, bpp=24, x=0, y=0):
a = genico(data, size, bpp) a = genico(data, size, bpp)
a[3], a[10], a[12] = 2, x, y a[3], a[10], a[12] = 2, x, y
return a return a
#C:\Python27\Lib\site-packages\weboob-0.g-py2.7.egg\share\icons\hicolor\64x64\apps #C:\Python27\Lib\site-packages\weboob-0.g-py2.7.egg\share\icons\hicolor\64x64\apps
@ -102,7 +109,6 @@ if __name__ == "__main__":
for j in range(wh): for j in range(wh):
data.append(rgba.getpixel((i,j))) data.append(rgba.getpixel((i,j)))
icoflow = genico(data, wh, 32) icoflow = genico(data, wh, 32)
_file = open(ico_file, "wb") _file = open(ico_file, "wb")
icoflow.tofile(_file) icoflow.tofile(_file)