Tif图片加水印核心代码+gevent处理大图片同步切换的时候内存不足的解决办法
在多任务处理几百兆一张图片加水印的时候,出现了内存不足的情况,针对以上情况的主要影响因素有以下几种:
1.内存不足
2.Python可用内存不足
3.减少任务并发数量
4.可能的话压缩图片
#加水印核心代码
def image_addwatermarker(infilepath, outfilepath, scene_text):
#scene_text为加了文字的图片句柄
#source_img.crop为tif加水印的核心代码,大图片用文字合成的方式不容易出现内存爆炸的情况
source_img = Image.open ( infilepath )
drawX = source_img.size[0]
drawY = source_img.size[1]
img = source_img.crop ( (0, 0, drawX, drawY) )
img.paste ( scene_text, mask=scene_text )
print ( outfilepath )
img.save ( outfilepath )
img.close ()
def create_font_img():
drawX = 11524
drawY = 8650
textstr = 'ahahah' #这里是水印的内容
font = ImageFont.truetype ( "fonts/msyh.ttc", 25 )
fontx = int ( font.getsize ( textstr )[0] * 1.5 )
fonty = int ( font.getsize ( textstr )[1] * 1.5 )
scene_text = Image.new ( 'RGBA', (drawX, drawY) ) # 此处是个坑
draw = ImageDraw.Draw ( scene_text )
# 画5个字段,方位为中心加四个角落,改这里参数可以修改水印位置
water_pos = [
(33, 33),
(drawX - fontx, drawY - fonty),
(drawX * 0.5, drawY * 0.5),
(33, drawY - fonty),
(drawX - fontx, 33),
]
for key in water_pos:
# print(key)
draw.text ( key, textstr, fill=(255, 255, 255, 125), font=font )
return scene_text
浙公网安备 33010602011771号