用 pypng 抽离 png 图片的 alpha 通道
我自己发现fireworks有一个滤镜--“转换成alpha”挺不错的,转换出来的alpha灰度图,作为遮罩来画,能够达到平滑的效果,但问题是这个alpha是有透明度的,使得图片变得很淡。
一直都知道最正确的办法是想办法把图片的透明效果,抽离成alpha通道,可是美工做出来的图都是不带alpha通道的,而是32位色带alpha字节的格式,photoshop,fireworks里面都找不到办法抽离出来,和美工解释也听不懂。。
在抓狂之际,想起了libpng,就用pypng来对美工给的png图片进行alpha通道抽离,过程很简单,抽离出来的图片保存成bmp以后,实际使用达到了和png一样的效果。
抽离的程序如下:
#-*- coding:gbk -*-
import png, urllib
def split_main_mask(orig_file):
mask_file = orig_file + '-mask.png'
main_file = orig_file + '-main.png'
r = png.Reader(file=open(orig_file,'rb'))
#print r.asRGBA()
pic = r.read()
pixels = pic[2]
w, h = pic[0], pic[1]
print 'pic info', pic
#print help(pixels)
m = [] # mask
m1 = [] # RGB
count = 0
for line in pixels:
#print line
count += 1
#print 'line len', len(line)
l = []
l2 = []
j = 0
while j+3 < len(line):
l.append(line[j + 3])
l2.append(line[j+0])
l2.append(line[j+1])
l2.append(line[j+2])
j += 4
m.append(l)
m1.append(l2)
#print count
'''
for i in range(h):
for j in range(w):
print m[i][j],
'''
#print help(png.Writer)
# write mask
f = open(mask_file, 'wb')
writer = png.Writer(w,h,greyscale=True,bitdepth=8)
writer.write(f, m)
f.close()
#write main
f = open(main_file, 'wb')
writer = png.Writer(w,h)
writer.write(f, m1)
f.close()
print '%s was split to %s %s' % (orig_file, main_file, mask_file)
if _name_ == '_main_':
import sys
if len(sys.argv) < 2:
print 'Usage: %s orig_file' % (sys.argv[0],)
sys.exit( 1 )
split_main_mask(sys.argv[1])# 注:主要看思路和步骤,以上代码可能会因为格式等问题不能正常运行
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。