使用Python给文件添加防伪水印?
防伪水印大家都不陌生,添加防伪水印的主要目的是保护文件的真实性和所有权,防止未经授权的复制、篡改和使用。下面我们就来看看通过Python如何实现为文件添加防伪水印的操作。
使用Python添加防伪水印到文件中,在不同的文件中需要用到不同的操作库,下面是两个比较常见的使用场景,为图片添加水印和为PDF文件添加水印。
图片文件添加水印操作
要实现图片添加水印操作,我们可以使用Pillow库来处理图像并添加水印,如下所示。第一步、我们先要安装Pillow库。
pip install pillow
接下来就是通过编码来实现往图片中添加水印的操作,如下所示。
from PIL import Image, ImageDraw, ImageFont
def add_watermark(input_image_path, output_image_path, watermark_text):
# 打开原始图像
original_image = Image.open(input_image_path)
width, height = original_image.size
# 创建水印图像
watermark_image = Image.new('RGBA', original_image.size)
draw = ImageDraw.Draw(watermark_image)
# 使用一个字体文件
font = ImageFont.truetype("arial.ttf", 36)
# 计算水印位置
text_width, text_height = draw.textsize(watermark_text, font)
x = width - text_width - 10
y = height - text_height - 10
# 添加水印
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128)) # 半透明白色
# 合并原始图像和水印
watermarked_image = Image.alpha_composite(original_image.convert('RGBA'), watermark_image)
# 保存结果
watermarked_image.show() # 显示添加水印的图像
watermarked_image.save(output_image_path, 'PNG')
# 示例使用
add_watermark('input_image.png', 'output_image.png', 'Sample Watermark')
通过上面的步骤,我们就可以在图片中添加上一个防伪的水印,当然在实际开发中,我们还可以对水印根据自己的实际需求来进行调整。
向PDF文件添加水印
往PDF中添加水印操作,一般我们可以通过PyPDF2和reportlab库来处理,还是一样,在使用前需要安装相应的依赖库,如下所示。
pip install pypdf2 reportlab
接下来就是通过这两库来实现往PDF中添加水印的操作。
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
def create_watermark(watermark_text, watermark_pdf_path):
c = canvas.Canvas(watermark_pdf_path, pagesize=letter)
c.setFont("Helvetica", 50)
c.setFillColorRGB(255, 0, 0, alpha=0.3) # 半透明红色
c.saveState()
c.translate(300, 500)
c.rotate(45)
c.drawCentredString(0, 0, watermark_text)
c.restoreState()
c.save()
def add_watermark(input_pdf_path, output_pdf_path, watermark_text):
# 创建水印PDF
watermark_pdf_path = 'watermark.pdf'
create_watermark(watermark_text, watermark_pdf_path)
# 读取源PDF和水印PDF
reader = PdfReader(input_pdf_path)
watermark = PdfReader(watermark_pdf_path)
writer = PdfWriter()
# 遍历所有页面添加水印
for i in range(len(reader.pages)):
page = reader.pages[i]
page.merge_page(watermark.pages[0])
writer.add_page(page)
# 保存结果
with open(output_pdf_path, 'wb') as output_pdf_file:
writer.write(output_pdf_file)
# 示例使用
add_watermark('input.pdf', 'output.pdf', 'Confidential')
上面的两个例子中,分别展示了通过Python往图片中和PDF中添加水印的操作,在实际使用场景中,我们可以对水印的位置,字体颜色、字体大小等进行调整,来实现更为复杂的防伪水印效果。