from PIL import Image, ImageDraw, ImageFont
import os
import re
def sort_key(filename):
# 提取文件名中的数字部分
return int(re.findall(r'\d+', filename)[0])
def compress_image(image, max_size=(2480, 3508), quality=85):
# 调整图像大小以适应A4纸张大小
img = image.copy()
img.thumbnail(max_size, Image.LANCZOS)
return img
def add_page_number(image, page_number, font_path=None):
# 在图像上添加页码
draw = ImageDraw.Draw(image)
font_size = 50
if font_path:
font = ImageFont.truetype(font_path, font_size)
else:
font = ImageFont.truetype("arial.ttf", font_size) # 例如在Windows系统中
text = f"{page_number}"
bbox = draw.textbbox((0, 0), text, font=font)
text_width, text_height = bbox[2] - bbox[0], bbox[3] - bbox[1]
width, height = image.size
position = (width - text_width - 1200, height - text_height - 30)
draw.text(position, text, font=font, fill="black")
return image
def images_to_pdf(image_folder, output_pdf, max_size=(2480, 3508), quality=85, font_path=None):
# 获取文件夹中的所有图片文件
image_files = [f for f in os.listdir(image_folder) if f.lower().endswith(('png', 'jpg', 'jpeg'))]
# 按照文件名中的数字部分排序
image_files.sort(key=sort_key)
# 打开所有图像并存储在列表中
image_list = []
for idx, image_file in enumerate(image_files):
image_path = os.path.join(image_folder, image_file)
img = Image.open(image_path)
# 压缩图像
img = compress_image(img, max_size, quality)
# 将图像转换为RGB模式,如果不是的话
if img.mode != 'RGB':
img = img.convert('RGB')
# 添加页码
img = add_page_number(img, idx + 1, font_path)
image_list.append(img)
# 将图像列表保存为PDF
if image_list:
image_list[0].save(output_pdf, save_all=True, append_images=image_list[1:])
# 使用函数将文件夹下的图片转换为PDF
image_folder = './照片所在文件夹'
output_pdf = 'output.pdf'
font_path = None # 如果需要使用自定义字体,请提供字体路径
images_to_pdf(image_folder, output_pdf, max_size=(2480, 3508), quality=85, font_path=font_path)
Python实现将多张图片转换为A4大小的PDF文件,并添加页码
最新推荐文章于 2024-11-15 12:08:22 发布