67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
import os
|
||
from PIL import Image, ImageDraw, ImageFont
|
||
|
||
# 获取脚本文件所在的目录
|
||
script_directory = os.path.dirname(os.path.abspath(__file__))
|
||
|
||
# 定义GIF预览文件夹路径
|
||
gif_preview_directory = os.path.join(script_directory, "000GIF预览")
|
||
os.makedirs(gif_preview_directory, exist_ok=True) # 创建文件夹,如果不存在则创建
|
||
|
||
def create_gif(frames, folder_name, duration=50, font_size=20):
|
||
images = []
|
||
for frame in frames:
|
||
image = Image.open(frame)
|
||
|
||
# 添加水印
|
||
watermark_image_path = "E:/path/shuiyin.png" # 水印图片路径
|
||
watermark_image = Image.open(watermark_image_path)
|
||
|
||
# 计算水印的大小(宽度为GIF宽度的10%,保持宽高比)
|
||
gif_width, gif_height = image.size
|
||
watermark_width = int(gif_width * 0.35)
|
||
aspect_ratio = watermark_image.width / watermark_image.height
|
||
watermark_height = int(watermark_width / aspect_ratio)
|
||
watermark_image = watermark_image.resize((watermark_width, watermark_height))
|
||
|
||
# 创建一个新图像,带有黑色背景
|
||
new_image = Image.new("RGB", image.size, (0, 0, 0))
|
||
|
||
# 将水印放在新图像上
|
||
x = (gif_width - watermark_width) // 2
|
||
y = (gif_height - watermark_height) // 2
|
||
new_image.paste(watermark_image, (x, y))
|
||
|
||
# 将主图像叠加在水印上
|
||
new_image.paste(image, (0, 0), image)
|
||
|
||
# 添加文件夹名称
|
||
draw = ImageDraw.Draw(new_image)
|
||
# 使用自定义字体和大小
|
||
# font_path = "path/to/font.ttf" # 如果您有特定的字体文件,请使用它
|
||
font = ImageFont.truetype("arial.ttf", font_size) # 使用 Arial 字体,或者您的字体文件路径
|
||
text_x = int(gif_width * 0.05) # X位置为5%的宽度
|
||
text_y = int(gif_height * 0.05) # Y位置为5%的高度
|
||
draw.text((text_x, text_y), folder_name, font=font, fill=(255, 255, 255)) # 白色字体
|
||
|
||
images.append(new_image)
|
||
|
||
# 构建GIF文件名
|
||
gif_output_path = os.path.join(gif_preview_directory, f"{folder_name}.gif")
|
||
images[0].save(gif_output_path, save_all=True, append_images=images[1:], optimize=False, duration=duration, loop=0)
|
||
|
||
def process_folder(folder_path):
|
||
png_files = [file for file in os.listdir(folder_path) if file.lower().endswith(".png")]
|
||
if png_files:
|
||
folder_name = os.path.basename(folder_path) # 获取文件夹名称
|
||
create_gif([os.path.join(folder_path, file) for file in png_files], folder_name, duration=50, font_size=20) # 字体大小设为 20
|
||
|
||
# 当前目录
|
||
current_directory = os.getcwd()
|
||
|
||
# 处理当前目录下的所有文件夹及其子文件夹
|
||
for root, dirs, files in os.walk(current_directory):
|
||
process_folder(root)
|
||
|
||
print("处理完成!")
|