draw = ImageDraw.Draw(img) text = 'Watermark' font = ImageFont.truetype('/path/to/font.ttf', size=36) textwidth, textheight = draw.textsize(text, font) x = img.width - textwidth - 10 y = img.height - textheight - 10 draw.text((x, y), text, font=font, fill=(255, 255, 255, 128)) 添加注释
时间: 2023-07-15 22:11:21 浏览: 129
这段代码用于在图片上添加水印。首先,创建一个 `ImageDraw` 对象来绘制水印。然后,定义水印文本和字体。`ImageFont.truetype()` 方法用于加载 TrueType 字体文件并设置字体大小。接下来,通过 `draw.textsize()` 方法获取文本的宽度和高度。然后,计算文本位置,将其放置在图片右下角。最后,使用 `draw.text()` 方法将文本绘制到图像上。`fill` 参数指定了文本颜色和透明度。
相关问题
from PIL import Image, ImageDraw, ImageFont import os text = "watermark" # 水印文字 font = ImageFont.truetype("arial.ttf", 36) # 字体和大小 path = r"C:\Users\Administrator\Desktop\0424特价直播样品\新建文件夹\新建文件夹" for filename in os.listdir(path): print(path,filename) if filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".JPG") or filename.endswith(".PNG"): # 只处理jpg和png图片 # 处理每一张图片 # 打开图片 image = Image.open(os.path.join(path, filename)) print(image) # 新建一个图层,用于绘制水印 layer = Image.new("RGBA", image.size, (0,0,0,0)) draw = ImageDraw.Draw(layer) # 计算水印文字的位置 text_width, text_height = draw.textsize(text, font) x = image.width - text_width - 10 # x坐标 y = image.height - text_height - 10 # y坐标 # 绘制水印文字 draw.text((x,y), text, font=font, fill=(255,255,255,128)) # 合并图层 result = Image.alpha_composite(image, layer) print(result) # 保存处理后的图片 result.save(os.path.join(path, filename)) 优化这段代码 当前报错内容 File "E:\python-i\venv\lib\site-packages\PIL\Image.py", line 3168, in alpha_composite return im1._new(core.alpha_composite(im1.im, im2.im)) ValueError: image has wrong mode 图片是mode=RGB
根据你提供的代码和报错信息,可能是因为调用了 `alpha_composite()` 方法,该方法要求两张图片的模式必须相同。因此,你需要将新建的图层 `layer` 和打开的图片 `image` 都转换为 RGBA 模式才可以使用 `alpha_composite()` 方法。
以下是修改后的代码:
```python
from PIL import Image, ImageDraw, ImageFont
import os
text = "watermark" # 水印文字
font = ImageFont.truetype("arial.ttf", 36) # 字体和大小
path = r"C:\Users\Administrator\Desktop\0424特价直播样品\新建文件夹\新建文件夹"
for filename in os.listdir(path):
if filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".JPG") or filename.endswith(".PNG"): # 只处理jpg和png图片
# 处理每一张图片
# 打开图片
image = Image.open(os.path.join(path, filename))
print(image.mode)
# 将图片转换为 RGBA 模式
if image.mode != 'RGBA':
image = image.convert('RGBA')
# 新建一个图层,用于绘制水印
layer = Image.new("RGBA", image.size, (0,0,0,0))
draw = ImageDraw.Draw(layer)
# 计算水印文字的位置
text_width, text_height = draw.textsize(text, font)
x = image.width - text_width - 10 # x坐标
y = image.height - text_height - 10 # y坐标
# 绘制水印文字
draw.text((x,y), text, font=font, fill=(255,255,255,128))
# 将图层转换为 RGBA 模式
if layer.mode != 'RGBA':
layer = layer.convert('RGBA')
# 合并图层
result = Image.alpha_composite(image, layer)
print(result.mode)
# 保存处理后的图片
result.save(os.path.join(path, filename))
```
在上述代码中,我们添加了两个 `if` 语句,用于检查图片和图层的模式是否为 RGBA 模式。如果不是,则使用 `convert()` 方法将其转换为 RGBA 模式。这样就可以避免 `alpha_composite()` 方法报错的问题。
在 Python 中使用 PyPDF2 向 1.PDF 文件添加多行逆时针旋转30度的文字水印,然后另存为watermarked_01.PDF
在Python中,你可以使用PyPDF2库读取PDF文件并利用PIL(Pillow)库进行图像处理来创建文字水印。为了将文字逆时针旋转30度并添加到PDF页面上,你需要按照以下步骤操作:
首先,确保已经安装了`pyPdf2`和`Pillow`库,如果没有,可以使用pip安装:
```bash
pip install PyPDF2 Pillow
```
接下来,这是一个简单的示例,演示如何做到这一点:
```python
from PIL import Image, ImageDraw, ImageFont
import PyPDF2
# 读取原始PDF
with open('1.pdf', 'rb') as original_pdf:
reader = PyPDF2.PdfFileReader(original_pdf)
# 创建一个临时图片用于存放文字水印
img_width = reader.getPage(0).mediaBox.getWidth() # 获取一页宽度
img_height = reader.getPage(0).mediaBox.getHeight() # 获取一页高度
text_watermark = "这是你的逆时针旋转30度的水印"
font_path = 'arial.ttf' # 字体路径可根据需要更改
font_size = img_height * 0.15 # 设置字体大小,这里为页面高度的15%
image = Image.new('RGB', (img_width, img_height), color='white')
d = ImageDraw.Draw(image)
font = ImageFont.truetype(font_path, font_size)
# 添加文字水印并旋转
watermark_position = (img_width / 4, img_height / 2) # 可调整位置
d.text(watermark_position, text_watermark, fill=(0, 0, 0), font=font)
rotated_image = image.rotate(-30, expand=True) # 逆时针旋转30度
# 将旋转后的文字水印叠加到PDF的某一页
page = reader.getPage(0)
x_pos = page.mediaBox.upperRight[0] - rotated_image.width # 计算水印的位置
y_pos = page.mediaBox.upperRight[1] - rotated_image.height
merged_page = Image.alpha_composite(page, rotated_image.crop((0, 0, rotated_image.width, rotated_image.height)).convert('RGBA'))
merged_page.paste(rotated_image, (int(x_pos), int(y_pos)), rotated_image)
# 创建一个新的PDF文件,并添加修改后的页
output_pdf = PyPDF2.PdfWriter()
output_pdf.addPage(merged_page)
# 写入新的PDF文件
with open('watermarked_01.pdf', 'wb') as output_file:
output_pdf.write(output_file)
阅读全文