Python实现处理图片水印的方法详解
本文将详细讲解如何使用Python处理图片水印,主要包含以下步骤:
- 导入所需模块
- 打开图片并添加水印
- 保存处理后的图片
导入所需模块
首先,在Python中处理图片需要用到PIL模块(Pillow),请确保已经安装。可以使用以下命令安装Pillow:
pip install pillow
安装完成后,通过以下代码导入PIL模块:
from PIL import Image, ImageDraw, ImageFont
打开图片并添加水印
使用PIL模块可以轻松地打开图片,并在图片上添加水印。下面是一个简单的示例,通过指定水印文字、文字大小、文字颜色等参数,添加文本水印:
# 打开图片
im = Image.open('example.jpg')
width, height = im.size
# 定义水印文字内容、大小、颜色、字体
text = 'Watermark'
font = ImageFont.truetype('arial.ttf', 36)
fill_color = (0, 0, 0, 100)
# 创建Draw对象并添加水印
draw = ImageDraw.Draw(im)
text_width, text_height = draw.textsize(text, font=font)
x = width - text_width - 10
y = height - text_height - 10
draw.text((x, y), text, font=font, fill=fill_color)
# 展示处理后的图片
im.show()
在这个示例中,Image.open()
函数用于打开指定的图片,ImageFont.truetype()
函数用于指定水印文字的字体(这里使用了系统自带的Arial字体),ImageDraw.Draw()
函数用于创建绘图对象并添加水印,Draw.text()
函数用于添加水印文字。
除了添加文本水印,还可以添加图片水印。下面是一个示例,通过指定水印图片路径和透明度参数,添加图片水印:
# 打开图片
im = Image.open('example.jpg')
width, height = im.size
# 打开水印图片并调整大小
logo_im = Image.open('logo.png')
logo_im = logo_im.resize((int(width / 2), int(height / 2)))
# 定义水印透明度
alpha = 0.5
# 创建混合图层并添加水印
alpha_layer = Image.new('RGBA', (width, height), (0, 0, 0, 0))
alpha_layer.paste(logo_im, (int(width / 2), int(height / 2)))
im = Image.alpha_composite(im, alpha_layer)
# 展示处理后的图片
im.show()
在这个示例中,Image.open()
函数用于打开指定的图片和水印图片,Image.resize()
函数用于调整水印图片的大小,Image.new()
函数用于创建一个空白的RGBA混合图层,Image.paste()
函数用于将水印图片粘贴到混合图层中指定位置,Image.alpha_composite()
函数用于将混合图层与原始图片合成,达到添加图片水印的效果。
保存处理后的图片
最后一步是将处理后的图片保存到本地文件或直接输出到浏览器。下面是一个示例,将处理后的图片保存到本地文件:
# 打开原始图片并添加水印
im = Image.open('example.jpg')
# ...
# 保存处理后的图片到本地文件
im.save('example_with_watermark.jpg')
在这个示例中,Image.save()
函数用于将处理后的图片保存到本地文件,指定文件名为example_with_watermark.jpg
。
除了保存到本地文件,还可以将图片直接输出到浏览器。下面是一个示例,使用Flask框架将处理后的图片输出到浏览器:
from flask import Flask, send_file
app = Flask(__name__)
@app.route('/')
def index():
# 打开原始图片并添加水印
im = Image.open('example.jpg')
# ...
# 将处理后的图片保存到BytesIO对象中
output = io.BytesIO()
im.save(output, format='JPEG')
output.seek(0)
# 输出图片到浏览器
return send_file(output, mimetype='image/jpeg')
if __name__ == '__main__':
app.run()
在这个示例中,使用Flask框架定义了一个路由/
,当用户访问该路由时,将处理后的图片输出到浏览器。使用io.BytesIO()
创建一个BytesIO对象,使用Image.save()
函数将处理后的图片保存到BytesIO对象中,最后使用Flask框架的send_file()
函数将BytesIO对象输出到浏览器。注意,需要设置输出的mimetype为image/jpeg
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现处理图片水印的方法详解 - Python技术站