利用PIL生成水印图片或文字
来源:互联网 发布:苹果手机写作软件 编辑:程序博客网 时间:2024/06/07 21:06
//转载自:http://blog.struct.cn/2008/7/6/use-pil-create-watermark/
最近在做一个图片网站,要处理很多图片,处理图片少不了加水印了,呵呵。PIL用得不熟,在网上找了一圈,加上自己稍微修改了一下,用起来也算方便,生成效果也不错,呵呵,支持透明的png水印图片,透明度和水印位置都可以很方便的调整。
上几张测试图:
代码:
import Image, ImageEnhance POSITION = ('LEFTTOP','RIGHTTOP','CENTER','LEFTBOTTOM','RIGHTBOTTOM')PADDING = 10MARKIMAGE = '16.png' def reduce_opacity(im, opacity): """Returns an image with reduced opacity.""" assert opacity >= 0 and opacity <= 1 if im.mode != 'RGBA': im = im.convert('RGBA') else: im = im.copy() alpha = im.split()[3] alpha = ImageEnhance.Brightness(alpha).enhance(opacity) im.putalpha(alpha) return im def watermark(imagefile, markfile, position=POSITION[4], opacity=1): """Adds a watermark to an image.""" im = Image.open(imagefile) mark = Image.open(markfile) if opacity < 1: mark = reduce_opacity(mark, opacity) if im.mode != 'RGBA': im = im.convert('RGBA') # create a transparent layer the size of the image and draw the # watermark in that layer. layer = Image.new('RGBA', im.size, (0,0,0,0)) if position == 'title': for y in range(0, im.size[1], mark.size[1]): for x in range(0, im.size[0], mark.size[0]): layer.paste(mark, (x, y)) elif position == 'scale': # scale, but preserve the aspect ratio ratio = min( float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1]) w = int(mark.size[0] * ratio) h = int(mark.size[1] * ratio) mark = mark.resize((w, h)) layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2)) elif position == POSITION[0]: #lefttop position = (PADDING,PADDING) layer.paste(mark, position) elif position == POSITION[1]: #righttop position = (im.size[0] - mark.size[0]-PADDING, PADDING) layer.paste(mark, position) elif position == POSITION[2]: #center position = ((im.size[0] - mark.size[0])/2,(im.size[1] - mark.size[1])/2) layer.paste(mark, position) elif position == POSITION[3]: #left bottom position = (PADDING,im.size[1] - mark.size[1]-PADDING,) layer.paste(mark, position) else: #right bottom (default) position = (im.size[0] - mark.size[0]-PADDING, im.size[1] - mark.size[1]-PADDING,) layer.paste(mark, position) # composite the watermark with the layer return Image.composite(layer, im, layer) def test(): watermark('1.jpg',MARKIMAGE,POSITION[0],opacity=0.7).save("watermarked_lt.jpg",quality=90) watermark('1.jpg',MARKIMAGE,POSITION[1],opacity=0.7).save("watermarked_rt.jpg",quality=90) watermark('1.jpg',MARKIMAGE,POSITION[2],opacity=0.7).save("watermarked_center.jpg",quality=90) watermark('1.jpg',MARKIMAGE,POSITION[3],opacity=0.7).save("watermarked_lb.jpg",quality=90) watermark('1.jpg',MARKIMAGE,POSITION[4],opacity=0.7).save("watermarked_rb.jpg",quality=90) watermark('1.jpg',MARKIMAGE,'title',opacity=0.7).save("watermarked_title.jpg",quality=90) watermark('1.jpg',MARKIMAGE,'scale',opacity=0.7).save("watermarked_scale.jpg",quality=90)if __name__ == '__main__': test()
- 利用PIL生成水印图片或文字
- PHP的生成图片或文字水印的类
- C#生成缩略图,加文字或图片水印
- 图片加水印或文字
- 生成缩略图,加文字水印,图片水印
- 生成文字水印、图片水印、缩列图
- php生成 文字水印 图片水印
- php生成图片文字水印
- C# 上传图片,生成缩略图,生成文字或图像水印图
- JAVA给图片添加图片水印或文字水印
- 利用PIL生成图片验证码
- ios图片加水印或文字
- ios图片加水印或文字
- ios图片加水印或文字
- IOS图片加水印或文字
- ios图片加水印或文字
- iOS图片加水印或文字
- C#生成缩略图,加文字或图片水印(程序类库)
- Android基础 : Android ContentProvider和getContentResolver
- Ello讲述Haar人脸检测:易懂、很详细、值得围观
- 黑马程序员-枚举
- hdu4528
- hdu 不容易系列之(3)—— LELE的RPG难题
- 利用PIL生成水印图片或文字
- 消除“Android NDK: WARNING: APP_PLATFORM”的方法
- MFC单文档中嵌入CEF(Chromium Embedded Framework)使用多进程
- 我的知识管理工具列表
- Aspose Word模板使用总结
- WINCE Activesync 同步问题
- 使用connect by、Sys_Connect_By_Path实现的SQL
- uva112 Tree Summing(二叉树 + 栈)
- web aria 例子