Python 批量生成水印 PDF 与图片混合文档教程
用 Pillow + PyPDF2/reportlab 给 PDF 加文字或图片水印,并把多张图片按 A4 排版合并成一个带水印的 PDF,适合合同、发票、扫描件批量处理。
场景痛点
合同、扫描件、产品图要
用 Pillow + PyPDF2/reportlab 给 PDF 加文字或图片水印,并把多张图片按 A4 排版合并成一个带水印的 PDF,适合合同、发票、扫描件批量处理。
场景痛点
合同、扫描件、产品图要
用 Pillow 批量在图片固定位置加中文文字,支持自定义字体、字号、颜色、描边、居左居右居上居下,适合给商品图、活动图、公告图批量打标题。
场景痛点
活动方图每张都要加标题
用 Pillow + numpy 对比两张同尺寸图片,按像素差生成高亮差异图,输出不同区域数量与差异百分比,适合设计稿改版比对、截图核对。
场景痛点
设计稿改了一版,要和上一版比对哪里动
用 Pillow 把多张截图竖向或横向拼接成一张长图,自动对齐宽度、留间距、支持加底色,适合聊天记录、海报组图、代码截图批量合成。
场景痛点
做教程时要把十几张截图拼成一张长
用 Pillow 按统一坐标或固定宽高比批量裁剪文件夹里的图片,支持居中裁剪、四角裁剪、输出到新目录,适合头像统一、商品主图去边。
场景痛点
电商主图要求 1:1 正方形,设计稿统
用 Pillow + 简单聚类批量提取每张图片的主色、平均色,输出十六进制色值到 CSV,适合做配色板、商品分类、素材库索引。
场景痛点
素材库几万张图,要按主色分类归档:红色系一组、
用 Pillow 把姓名批量渲染成带手写字体、透明背景的电子签名 PNG,支持指定字体、字号、颜色、倾斜角度,适合合同、审批单批量盖章。
场景痛点
HR 批量做劳动合同、采购审批单,
用 Pillow 打开本地图片,读取宽、高、分辨率、文件大小与颜色模式,支持 JPG/PNG/WebP 批量输出 CSV 清单,告别逐张右键属性查看。
场景痛点
设计稿、商品图、截图堆在一个文件
用 Pillow 给图片加圆角,生成带透明背景的 PNG,支持指定圆角半径、批量处理文件夹、保留原比例,适合做头像、卡片、商品图。
场景痛点
做小程序头像、商品卡片、PPT 配图,都要求
用 Pillow 把一张大图平均切成 3x3 九块,按顺序命名输出,适合朋友圈九宫格、小红书配图、海报切片,几行代码搞定。
场景痛点
朋友圈要发九宫格,拿修图软件把一张大图切成九块,导
用 Pillow 批量把文件夹里的图片顺时针或逆时针旋转任意角度,自动处理 EXIF 方向、旋转后留白填充,适合手机照片转正、扫描件批量调方向。
场景痛点
手机拍的照片导入电脑后方
用 Pillow 把图片白底变透明、调整整体不透明度、把透明 PNG 合成到背景上,支持按容差去除指定颜色,适合抠图标、做贴纸、合成海报。
场景痛点
下载的图标、截图、贴纸都是白
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus&
from wordcloud import WordCloud
import jieba
def make_wordcloud(text_file, output='wordcloud.png'):
with open(text_file, 'r', encoding='
import os def folder_size(path): total = 0 for root, _, files in os.walk(path): for name in files: try: total += os.path.
import os
import hashlib
from collections import defaultdict
def file_hash(path, chunk=8192):
h = hashlib.md5()
with open(path, 'rb') as f:
import osimport timefrom datetime import datetime def shutdown_at(hour, minute, restart=False): while True: now = datetime.now() if now.hour ==
import osimport requestsfrom bs4 import BeautifulSoupfrom urllib.parse import urljoin def download_images(url, folder='images'): os.makedirs(folder,
import subprocess
import os
def compress_video(src, dst, crf=28):
"""crf 越大压缩越狠,18~28 之间比较合适"""
cmd = [
'ffmpeg', '-i
import os
from moviepy.editor import VideoFileClip
def video_to_audio(folder):
for name in os.listdir(folder):
if not name.lower().endswith(('.
from gtts import gTTS def text_to_speech(text, output='output.mp3', lang='zh-cn'): tts = gTTS(text=text, lang=lang, slow=False) tts.save(o
import os
import pytesseract
from PIL import Image
# Windows 需指定 tesseract 路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR
from pypdf import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
import io
def add_pdf_watermark(src, dst, tex
import os
from pdf2docx import Converter
def pdf_to_word(folder):
for name in os.listdir(folder):
if not name.lower().endswith('.pdf'):
import os
import win32com.client
def excel_to_pdf(folder):
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False
for
from playwright.sync_api import sync_playwright
def html_to_pdf(url, output='page.pdf'):
with sync_playwright() as p:
browser = p.chromium.
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options def screenshot(url, output='screenshot.png'): options = Options()
import osfrom pyzbar.pyzbar import decodefrom PIL import Image def decode_qrcodes(folder): for name in os.listdir(folder): if not name.lower().endswit
import qrcodefrom qrcode.image.styledpil import StyledPilImagefrom qrcode.image.styles.moduledrawers import RoundedModuleDrawer def gen_qrcode(data, output='
import os
from PIL import Image, ImageDraw, ImageFont
def add_watermark(folder, text='© 我的网站'):
out_dir = os.path.join(folder, 'waterm