写代码最有成就感的时刻,不是做出多炫的东西,而是把一个反复出现的麻烦,悄悄变成一行不用再管的命令。这一篇收的六个脚本,方向都不大,但胜在「天天用得上」:给照片调色、把截图里的字抠出来、翻一段外文、拼一张相册、把数据在终端排好看、再顺手清掉重复图片。它们彼此独立,挑顺手的拿走即可。
1. 图片批量套滤镜
修图软件打开太重,想给一批照片统一调个色温、加点复古感,用 Pillow 几行就能批处理。下面这个函数支持暖色、复古、锐化三种模式。
(需 pip install pillow)
from PIL import Image, ImageEnhance, ImageFilter
import os
defapply_filter(src, dst, mode="warm"):
im = Image.open(src).convert("RGB")
if mode == "warm": # 暖色:提饱和、微提亮
im = ImageEnhance.Color(im).enhance(1.3)
im = ImageEnhance.Brightness(im).enhance(1.05)
elif mode == "retro": # 复古:降饱和、拉对比
im = ImageEnhance.Color(im).enhance(0.6)
im = ImageEnhance.Contrast(im).enhance(1.2)
elif mode == "sharp": # 锐化:补清晰度
im = im.filter(ImageFilter.SHARPEN)
im.save(dst)
os.makedirs("out", exist_ok=True)
for name in os.listdir("photos"):
if name.lower().endswith((".jpg", ".png")):
apply_filter(f"photos/{name}", f"out/{name}", mode="warm")
小提示:mode 的参数可以自己调,enhance 里大于 1 是加强、小于 1 是削弱;想做黑白就 ImageEnhance.Color(im).enhance(0)。把 "photos" 换成你自己的文件夹路径即可。
2. 截图 OCR 转文字
收到一张带字的截图、扫描件,不想一个字一个字敲,用 OCR 直接把图里的文字提取成文本。底层用 Tesseract 引擎,中文英文都支持。
(需 pip install pillow pytesseract,并另行安装 Tesseract 主程序、下载中文语言包 chi_sim)
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(
Image.open("shot.png"), lang="chi_sim+eng"
)
print(text)
小提示:识别率很吃图片清晰度,截图尽量用原图、别压太狠;背景干净、字体规整时效果最好。如果只认英文,把 lang 改成 "eng" 即可,速度更快。
3. 离线也能用的文本翻译
偶尔要翻一段外文资料,不想切来切去开网页,用 deep-translator 在脚本里直接翻。下面以英译中为例,换成别的语言只改两个参数。
(需 pip install deep-translator,翻译过程需联网)
from deep_translator import GoogleTranslator
deftrans(text, src="en", dest="zh-CN"):
return GoogleTranslator(source=src, target=dest).translate(text)
print(trans("Good morning, have a nice day."))
# 输出:早上好,祝你今天愉快。
小提示:source 和 target 用语言代码,比如 "ja" 日语、"fr" 法语、"ko" 韩语;如果不确定原文语种,把 source 设成 "auto" 让它在倒入时自动判断。
4. 图片拼贴成相册
出游、活动拍了一堆图,想拼成一张方正的九宫格相册发出来,用 Pillow 把多张图统一缩放后贴到画布上就行。
(需 pip install pillow)
from PIL import Image
import os
defcollage(files, cols=3, size=(300, 300), gap=10):
rows = (len(files) + cols - 1) // cols
w = cols * size[0] + (cols + 1) * gap
h = rows * size[1] + (rows + 1) * gap
canvas = Image.new("RGB", (w, h), (255, 255, 255))
for i, f in enumerate(files):
im = Image.open(f).convert("RGB").resize(size)
r, c = divmod(i, cols)
x = gap + c * (size[0] + gap)
y = gap + r * (size[1] + gap)
canvas.paste(im, (x, y))
canvas.save("collage.jpg")
files = [f"photos/{n}"for n in os.listdir("photos")
if n.lower().endswith((".jpg", ".png"))]
collage(files)
小提示:cols 控制每行几张,size 控制每张缩放到多大,gap 是间距;图多了就自动加行。想留白边框,把画布底色从白色改成其他 RGB 即可。
5. 终端里的漂亮表格
在终端跑脚本、看数据,默认的打印又乱又挤。rich 能一行美化输出,表格、颜色、对齐都帮你排好,调试日志和结果展示一下子体面了。
(需 pip install rich)
from rich.console import Console
from rich.table import Table
table = Table(title="本月支出")
table.add_column("类别", style="cyan", no_wrap=True)
table.add_column("金额", justify="right", style="green")
table.add_row("餐饮", "1280")
table.add_row("交通", "430")
table.add_row("其他", "260")
Console().print(table)
小提示:style 支持常见颜色名(red/green/cyan/magenta 等),justify 控制列内对齐;除了表格,rich 还能直接美化日志、进度条、JSON,做命令行小工具很好用。
6. 图片感知哈希去重
相册里总有几张几乎一样的图,靠肉眼翻太累。感知哈希会把相似图片算成相近的指纹,哈希一致就基本是重复,批量扫一遍就能揪出来。
(需 pip install pillow imagehash)
from PIL import Image
import imagehash, os
deffind_dupes(folder):
seen = {}
for n in os.listdir(folder):
ifnot n.lower().endswith((".jpg", ".png")):
continue
h = imagehash.average_hash(Image.open(f"{folder}/{n}"))
seen.setdefault(str(h), []).append(n)
return {k: v for k, v in seen.items() if len(v) > 1}
print(find_dupes("photos"))
小提示:它比对的是「视觉相似」而不是「文件完全一致」,所以轻微裁剪、调色过的图也能识别;容忍度更高可以用 phash(感知哈希)或 dhash 替换 average_hash。确认无误后再决定删不删,别直接自动清。
这六个脚本没有一个是「大项目」,但贵在随时能派上用场:调色和拼贴管图片,识字和翻译管文字,表格管展示,去重管整理。把它们各自存成一个 .py,用到的时候改改路径和参数,琐碎事就交给电脑了。