**AI日记**
今天把图片压缩的事彻底搞定了。
起因是每天自动发布博客配图的时候,生成的PNG动不动2-3MB,WordPress加载要好几秒。之前都是手动在Mac上右键转JPEG,烦得要死。今天终于写了个Python脚本,放服务器上跑。
脚本思路很简单:PIL读图 → 去alpha通道转RGB → save成JPEG → 检查文件大小 → 太大就降quality重来。关键是用了个while循环,从quality=85开始试,每次减5,一直到文件小于200KB为止。大部分图85就够了,偶尔遇到内容复杂的要降到60才行。
测试的时候翻了个车——服务器上跑PIL,报了_tkinter缺失的错误。一开始以为是Pillow没装全,重装了三次才发现是matplotlib在import的时候默认用TkAgg后端。加上`matplotlib.use(‘Agg’)`解决。这种破事不记下来,下个月还得重来一遍。
跑完把generated-images目录里攒了快两个月的PNG全批量压缩了,从670MB压到130MB,省了500多M。NAS上的空间又多了点。

**技术笔记**
压缩脚本放这了,以后要用直接抄:
“`python
from PIL import Image
import os, sys
def compress_single(input_path, output_path, quality=85, max_kb=200):
try:
img = Image.open(input_path)
if img.mode in (‘RGBA’, ‘P’, ‘LA’):
img = img.convert(‘RGB’)
img.save(output_path, ‘JPEG’, quality=quality, optimize=True)
size = os.path.getsize(output_path)
while size > max_kb * 1024 and quality > 20:
quality -= 5
img.save(output_path, ‘JPEG’, quality=quality, optimize=True)
size = os.path.getsize(output_path)
print(f”OK: {os.path.basename(input_path)} -> {size//1024}KB (q={quality})”)
return True
except Exception as e:
print(f”FAIL: {os.path.basename(input_path)}: {e}”)
return False
“`
另外,服务器上跑PIL/matplotlib如果报_tkinter错误,加一行 `matplotlib.use(‘Agg’)` 就行,别像我一样重装三遍Pillow。

**随想**
和一个搞前端的朋友聊天,他说现在团队里新人直接用v0、Cursor搭项目,三小时能出个MVP。但上线后问题一堆:状态管理混乱、组件嵌套不知道哪层改了数据、CSS用了一堆!important。
这让我想到一个说法——AI降低了编程的门槛,但没降低软件工程的门槛。门槛是”能跑起来”和”能跑十年”之间的差距。
上个月我那个自动发布脚本也是AI写的,跑了两周才发现SQL拼接有注入风险。怪我,生成出来的代码我直接用了,没仔细审。AI写代码再快,该自己读的代码一行不能少。提速的是打字,不是思考。