最近的思考
最近这段时间工作很累,但应该快到头了,老板的工作重心似乎不打算在现在公司上面了。就阶段性总结一下吧。
这几年做了很多我之前从来没接触过的内容,比如爬虫、比如 latex 排版、印刷行业的一些知识、再比如用 python 的 opencv 去底色的原理、更遑论排版设计、Ai 和 ps 的应用、文案的编辑......
每个活扔给我的时候,我都头大得很,全是未知领域,但我都是答应老板我试试看,然后直接上手去做。
放以前我可能会觉得,专业的事情应该交给专业的人去干。要做这个活就得系统学习,但是现在我觉得这个过程也不是必须的的,很多系统性的知识在实践的时候自然而然的会接触到。
我一直主张项目型学习法,就是以一个项目来驱动学习。系统学习有系统学习的好处,项目驱动有项目驱动的好处。
一个现成的例子,我这个博客的技术栈是 next.js + vercel + tailwindcss,这三个技术哪个学个入门都少说十个小时。那这漫长的学习会严重影响我博客的搭建。实际上我是怎么做的呢?大概看了下 vercel 的原理,接着直接看 next.js 官网上 mdx 的部署文档,然后开始整,遇到问题再去找解决方案。
项目能跑了之后再慢慢优化,其实工作中很多时候都是费心费力把东西做出来之后,没多久就成废案了。简而言之完美主义在学生时代才吃香。
别犹豫,先做一个垃圾出来,再慢慢改。
醒图
用过醒图的朋友可能就会知道,醒图这家来自字节跳动公司出品的软件会毫不犹豫地修改你的元数据。用醒图处理过后的图片,拉到电脑上 随便找个检测 exif 信息的网站丢进去跑一下就知道了,它甚至会把 Artist 都写成醒图的名字。
想保留元数据,又想用醒图 P 图片,怎么办呢?那就写个脚本删掉多余的东西就行了。比如我拿一张经过醒图修改过的图片,先用 python 读取一下 exif 信息。
code 的样式没写好,目前我也不清楚要改哪里,先凑合用,总之把代码隐藏就不会显得那么难看。
点击展开代码/收起
```python import os from PIL import Image from PIL.ExifTags import TAGSdef get_exif_data(image_path): try: image = Image.open(image_path) exif_data = image._getexif() if not exif_data: return {} exif = { TAGS.get(tag, tag): value for tag, value in exif_data.items() } return exif except Exception as e: print(f"读取文件 {image_path} 时出错: {e}") return {}
def is_image_file(filename): return filename.lower().endswith(('.jpg'))
def traverse_and_print_exif(): current_dir = os.path.dirname(os.path.abspath(file)) for filename in os.listdir(current_dir): if is_image_file(filename): print(f"\n--- {filename} ---") exif = get_exif_data(os.path.join(current_dir, filename)) if exif: for key, value in exif.items(): print(f"{key}: {value}") else: print("无 EXIF 信息")
if name == "main": traverse_and_print_exif()
</details>
我导入了一张图片进去,显示了下面的信息:
--- IMG_9192.PNG --- ResolutionUnit: 2 ExifOffset: 212 Make: Canon Model: Canon EOS 6D Mark II Software: Xingtu iOS 12.2.0 DateTime: 2025:05
02:34 YResolution: 72.0 XResolution: 72.0 Artist: Xingtu ExifVersion: b'0230' ShutterSpeedValue: 8.625 ApertureValue: 3.0 ExifImageWidth: 4096 ExposureBiasValue: 0.0 ExifImageHeight: 2304 UserComment: b'ASCII\x00\x00\x00{"source_type":"douyin_beauty_me","data":{"activityName":"","effect_id":"edit","capability_extra_v2":{"filter":[{"effect_id":"9577976","resource_id":"7201005444859433528","origin":"heycan"}]},"pictureId":"DB2F989F-DAE7-4281-88FA-DC85674748BF","imageEffectId":"","appversion":"12.2.0","playId":"","capability_key":["edit","filter"],"stickerId":"","alias":"Km0gbi4PIC0vW99xU7eZrYdyJNOeP3ddqejXADFt8hX05KxTGT07eKnHfndvMW3xvHl60I4Bms6Y\/HmT7TzWNSm5zYvOctqb1\/b8Qigh+mO+SfRZfoJkAMrxzOoAIXpOfa2h7vAc+shmVPLSVQhIlpLV6xCHF1PEOANTLAPHGDHk0oj7xL4Z9XZUucmZeL0BSheHzwty57diOjr93onJq\/1WAQOq\/ofCojH+uyYouhxxXWI8dUl+W7pILgsLGzh\/dMR4xprazpzC0tQoKB10zBqBtRv4NdaVMUlttHyI\/NHHlhRR\/DSP0MBftkZ1ww7f9+xTh1xATqNqGT0ZYGJ9AQ==","effect_type":"tool","infoStickerId":"","enter_from":"enter_launch","os":"ios","product":"retouch","filterId":"7201005444859433528"}}' MeteringMode: 5 WhiteBalance: 0 Flash: 16 FocalLength: 24.0 SubsecTimeOriginal: 44 SubsecTimeDigitized: 44 ExposureTime: 0.0025 FNumber: 2.8 ExposureProgram: 3 ISOSpeedRatings: 200 MakerNote: b'Apple iOS\x00\x00\x01MM\x00\x00\x00\x00\x00\x00'
好家伙,不但把 `Artist` 写上自己的名字,还写了一堆意义不明的 `UserComment`。对比一下,我们只要删掉"ResolutionUnit", "Software", "Artist", "UserComment", "MakerNote"这几个属性。
<details className='mt-2 ml-6'>
<summary>点击展开/收起</summary>
```python
import os
import piexif
from PIL import Image
print("当前工作路径为:", os.getcwd());
EXIF_KEYS_TO_DELETE = {"ResolutionUnit", "Software", "Artist", "UserComment", "MakerNote"}
#映射人类可读名到 piexif 所需的 tag key (对应各个 IFD 组)
EXIF_TAG_MAP = {
"0th": piexif.ImageIFD,
"Exif": piexif.ExifIFD,
"1st": piexif.ImageIFD,
"GPS": piexif.GPSIFD
}
def is_image_file(filename):
return filename.lower().endswith(('.jpg', '.jpeg'))
def remove_exif_fields(image_path):
try:
exif_dict = piexif.load(image_path)
modified = False
for ifd_name, ifd in EXIF_TAG_MAP.items():
for tag_name in EXIF_KEYS_TO_DELETE:
tag_id = getattr(ifd, tag_name, None)
if tag_id and tag_id in exif_dict.get(ifd_name, {}):
del exif_dict[ifd_name][tag_id]
print(f"删除 {tag_name} 于 {image_path}")
modified = True
if modified:
exif_bytes = piexif.dump(exif_dict)
image = Image.open(image_path)
image.save(image_path, exif=exif_bytes, quality=100, subsampling=0)
else:
print(f"{image_path} 中无指定 EXIF 字段")
except Exception as e:
print(f"处理 {image_path} 出错: {e}")
def process_images():
current_dir = os.path.dirname(os.path.abspath(__file__))
for filename in os.listdir(current_dir):
if is_image_file(filename):
remove_exif_fields(os.path.join(current_dir, filename))
if __name__ == "__main__":
process_images()
轻松搞定,我的博客也能是技术博客 😎(代码有经过 chatGPT 老师斧正)
周二停水
周二住的地方清理蓄水池,所以停了一天水。我感觉最近很背,但凡停水,我就拉肚子。
解决办法就是去马路对面上厕所。
太阳很大,但强度不算大,晒在身上还蛮舒服的。
每次工作时间溜出来,就会有很大的困惑:为什么工作日的工作时间外面能有这么多人,他们都靠什么赖以生存,我也不想上班。
我记得很多年前,我还没找到工作的时候,那是一个春天,大概十点多,我走在街上:蝴蝶在飞,阳光洒在路边洒水机喷出的水上散射成彩虹的颜色,树香袭人。
当时正巧刚从一家死气沉沉的公司面试完出来,很感慨:要是去了这家公司,这辈子可能就看不到这些了。
现在虽然老板允许我居家办公,我想出来晒太阳自然也没人会管我,但事实上我也很久没接触这些了。
抓不住的时间啊。
一家之主 S2-S5
这几天很烦躁,老板工作重心不在公司上了,自己去探索其他的盈利方式了,但是现在公司这要维护太多东西了,隐约感觉以后公司就算不搞了,我还会有不少工作要跟踪对接。
又陷入了游戏不想打游戏,书不想看书,勉强找了这个番看。
前三季我很多年前就看过了,那段时间我还好爱用 Bobby 的动图当表情包。

然后几乎一到两天一季的速度在重看,我这几天倒是很爱看这个番。故事集中在德州希尔一家,同样是讲家庭喜剧,它不同于另一个长寿番「辛普森一家」,「一家之主」的幽默更务实更聚焦现实。
在「一家之主」里每个人都有自己的优点和缺点,有纠结有局限性,让他们显得很真实可爱。
父亲 Hank 是一个传统的德州中产,红脖子,热爱橄榄球和石油气,传统、保守。而 Bobby 胖胖的,生活大多时候都是比较懒的,很多事也都不想管太多,有点蜡笔小新的感觉在,不过蜡笔小新才 5 岁,他已经 12(13)岁了。 Bobby 虽然懒, 对于家人、喜欢的人都是将心比心认真对待的;自己虽然有缺点,但是却也会拥抱自己的缺点;在父亲和母亲的保护下 Bobby 天真善良。Bobby 的爱好也很独特,职业理想是当一个谐星。
一家之主的核心剧情大多发生在父子俩之间,Hank 的传统保守与 Bobby 的天真善良之间的矛盾,Bobby 既渴望得到父亲的认可,又试图坚持自己的个性。同样的 hank 有自己的价值观,而 Bobby 喜欢的东西和自己价值观又不太符,家庭和价值观之间的冲突是这个剧的主要笑点和泪点。
有很多集结构都非常精彩,也有很多集很赚眼泪,我单独拿 Bobby 是达赖转世那一集写下来,我必须说一下这一集,立意太高了。
这一集围绕 Bobby 被误认为是达赖喇嘛转世灵童,一群佛教高僧来到小镇寻找喇嘛转世灵童,他们相信灵童就在小镇居民中。Bobby 本意是为了护着小女友 Connie 拿起了一个手杖当谐星吸引大家注意力,结果歪打正着被僧侣当作是灵童转世。Bobby 因此对佛教文化表现出浓厚的兴趣,尤其是对僧侣们的平和态度和哲学思想感到着迷。他甚至开始模仿僧侣的行为,比如冥想和穿僧袍,这让 Hank 更加不安。

Bobby 也开始展现出了卓绝的佛学悟性,或许正因为 Bobby 天性善良,同时对生活又佛系,很快就悟道了,举手投足和一个活佛一样。剧情最高潮,僧侣要对 Bobby 做最后的测试,以确认他是否就是灵童转世。测试的内容就是在一堆东西里面,选出前任喇嘛用过的东西,听起来和抓周差不多不靠谱。但同时 Bobby 得知当喇嘛就不能结婚了,可是他还喜欢着 Connie, 他说他要在最终测试时随便选一个,但是 Connie 说不能乱选,因为这是她的信仰,她不能在余生带着怀疑过一生。Bobby 陷入了苦恼。
Bobby 问高僧,「是不是所有东西都可以选」,高僧说「是」。

Bobby 指着镜子里的 Connie 说,我要选镜子里的 Connie。大家表情不一, Bobby 这个选择就是放弃成为喇嘛,回归日常生活。非常高级,情商卓绝。
但这集的尾声,高僧之间在争论,年轻僧人说这个镜子就是前任喇嘛的镜子,年长僧人说 Bobby 只是用了这个镜子,没有选这个镜子......
这让整个剧情蒙上了一层神秘色彩。
薄荷的对照试验
无意间做了个对照实验,我买了两盆薄荷回来养,加完水之后一盆放阳台桌子上了,一盆放我工作桌子上。

工位前的薄荷我时不时会优化掉它黄色的叶子,阳台那盆我忘了它的存在。
工位前的薄荷每天听我唉声叹气抱怨工作,阳台边上的薄荷没人理过它。
工位前的薄荷我没事撸它两下提神,阳台上的没人管过它。
半个月过去了,工位前的薄荷窜得老高,但是发黄。阳台上的和一盆假薄荷一样,绿得发油,根枝强健。