Python+Pillow表情包生成器:图像处理入门实战指南
这个标题其实藏着一个很典型的入门误区很多人学Python第一件事就是去啃语法书或者跟着教程爬网页、搞数据分析结果学了两周发现自己连一个“能拿得出手”的东西都没做出来然后热情就凉了。表情包生成器这个方向我倒是觉得特别适合入门原因很简单——它足够好玩而且在你还没搞懂“面向对象”是什么的时候就能做出来真正能用的东西。这篇文章写给三类人完全没写过代码、刚装好Python还不知道下一步干什么的新手学过一点Python但只做过练习题、想尝试一个完整小项目的初学者以及想让办公群和聊天记录变得更有趣的摸鱼选手。我会从环境配置讲起一直做到能批量生成带文字、带表情图案、甚至能动的GIF表情包全程给出可以直接复制的代码。如果你之前搜过“python env环境配置”“python下载安装教程”这类词但最后还是一头雾水那这篇文章可能就是你要找的完整答案。1. 为什么是Pillow而不是OpenCV或者PIL先说结论做表情包这个项目用Pillow就够了而且它是新手的“友好型”选择。我第一次做类似项目的时候其实走了一段弯路——当时觉得“图像处理”这种事肯定得上OpenCV结果安装就折腾了半天随后光是搞明白cv2.imread和cv2.cvtColor就花了不少时间最后还没等画出一个圆形人就快被劝退了。后来换成了Pillow整个过程五分钟不到就跑通了第一张图。这三个库的区别我用一个特别不严谨但好懂的方式解释一下PIL是老牌的图像处理库但已经很多年没有更新了就像一台还能跑但零件买不到的旧车Pillow是PIL的“精神续作”接口几乎一样但一直在维护装它用pip install pillow就行而默认的PIL实际上已经不可用了。至于OpenCV它是个重型武器人脸识别、视频分析、摄像头画面处理才是它的主场拿它来做表情包有种杀鸡用牛刀的笨重感而且它的安装体积和API复杂度对新手都不太友好。表情包生成这件事本质上需要的是“创建画布、画图形、写字、保存图片”四个能力Pillow对这些操作的封装非常直接。比如你要画一个圆draw.ellipse()一行就搞定你要写字draw.text()传入坐标、文字内容和字体就行。这种“所见即所得”的体验对建立正反馈太重要了。还有一点是跨平台问题。Pillow在Windows、macOS和Linux上都能用同样的代码运行不需要额外处理环境差异。你在公司Windows电脑上写好的代码拿到家里Mac上跑结果是一样的。2. 先解决“装不上、跑不起来”这三件烦人事很多新手放弃Python不是倒在代码上而是倒在安装环境这一步。我见过太多人卡在“python安装完了但命令行输python没反应”或者“pip install报错一大堆红色文字”这两道坎上。这里把我的处理流程完整走一遍——这些坑我都踩过。2.1 Python安装与环境变量为什么装完还是“找不到命令”Windows下安装Python有一个很多教程都没强调的关键动作安装时一定要勾选“Add Python to PATH”。如果漏了这一步Python其实装好了但系统不知道去哪里找它在命令行里输python自然就没有反应。已经装完但又没勾选的人也不用重装手动配一下环境变量就行。路径一般是C:\Users\你的用户名\AppData\Local\Programs\Python\Python312\也要把同目录下的Scripts文件夹加进去。配置好之后记得关掉命令行窗口重新打开再输python --version验证。macOS用户稍微特殊一点。新版macOS自带的Python版本老到没法用如果你输入python3 --version能显示但装库的时候又提示“externally-managed-environment”这其实是系统在保护它的Python环境。这时候绕开系统Python直接用homebrew install python是比较省心的路子。提示安装完Python后建议立刻执行两个检查命令python --version和pip --version。两条都正常显示版本号才说明安装链路是通的。实测很多在pip阶段报错的人问题根源在这里。2.2 库装不进pip慢或报错的通用解法Python官方源在部分网络环境下慢得让人抓狂这时候推荐用国内镜像。在命令行里执行pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple这里pillow就是Pillow库的安装包名。看到“Successfully installed Pillow-10.x.x”这样的字样就说明装好了。如果你用的是Anaconda环境那pip install和conda install混着用是新手最容易混乱的地方。碰到提示“No module named PIL”但你已经装过conda的pillow一般是因为命令执行的Python环境和库所在的环境不是同一个。在命令行输pip --version看看路径就知道到底是装到哪里去了。2.3 字体准备中文能不能显示全看这一步Pillow画中文文字有一个坑是新手必踩的——默认字体不支持中文。在使用draw.text()画中文的时候如果不指定字体Pillow会用内置字体而内置字体是不包含中文字形的最后出来的效果就是一堆“豆腐块”方框。你需要给Pillow一个能渲染中文的字体文件路径。Windows系统在C:\Windows\Fonts\下面有一堆现成的字体比如微软雅黑是msyh.ttc、黑体是simhei.ttf。macOS的字体放在/System/Library/Fonts/有一个比较通用的文件叫PingFang.ttc。验证字体路径能不能用的判断方法直接看扩展名是.ttf还是.ttc。两种Pillow都支持但代码里一定要写对完整的文件路径。我建议把字体文件复制到你项目的fonts文件夹里这样代码不管换到哪台机器跑路径都不会出错。好环境这块理顺了我们就正式开工。3. 图片生成的底层逻辑像素坐标和图层用Pillow生成表情包重要的不是会调用那些API而是理解这个API在你背后做了什么事。两个概念搞明白后面的代码就全通了。第一个是坐标系。图片的左上角是(0, 0)往右是x轴正方向往下是y轴正方向。新手最容易犯的错误是“想当然地把坐标当成数学里的坐标系”画一个“右下角”的内容结果写出来的坐标跑到了左上角。记住y轴方向是反的。第二个是图像模式。常见的有RGB和RGBA区别就是后面多了一个Alpha通道也就是透明度信息。生成表情包我建议统一用RGBA因为做透明背景或半透明效果的时候很方便。还有一个隐藏的底层概念是“图层”。你在Pillow里所有画的图形、写的文字本质上是在修改一张图片对应坐标上的像素颜色。先画背景再画文字等于先铺底色再叠字这就跟PS图层的逻辑完全一致。用生活化的类比你可以把Image.new想象成铺了一张白纸ImageDraw.Draw就是拿起画笔每画一笔都要告诉画笔“画到哪里、什么颜色、画多大”。计算机画画没有“感觉”全靠你给的坐标和尺寸但这也意味着——只要你给的参数是对的出来的效果一定是可控的、可复现的。4. 第一版代码30分钟做出一个纯文字表情包先做一个最基础的版本——给一张纯色图片加上几个字。这个版本跑通了你就算正式“入门”了。4.1 创建画布与初始化画笔from PIL import Image, ImageDraw, ImageFont # 创建一张400x400的RGB图片底色设为浅黄色 width, height 400, 400 bg_color (255, 244, 170) img Image.new(RGB, (width, height), bg_color) # 初始化画笔 draw ImageDraw.Draw(img) # 加载中文字体注意路径换成你自己的字体文件 font_path fonts/msyh.ttc # 相对路径或填绝对路径 font ImageFont.truetype(font_path, size48) # 在图片上写字 text 好的收到 draw.text((100, 150), text, fontfont, fill(0, 0, 0)) # 保存图片 img.save(first_meme.png) print(表情包生成成功)这里面有一个细节draw.text((100, 150), ...)里的坐标指的是文字外框的左上角不是文字正中间。新手想“把文字居中”经常出现文字跑偏。这是因为你给的坐标是文字的起点而不是中心点。4.2 让文字真正居中用textbbox量出文字尺寸要精确居中得先知道文字渲染出来后占据多大面积。Pillow提供了textbbox方法bbox draw.textbbox((0, 0), text, fontfont) text_width bbox[2] - bbox[0] text_height bbox[3] - bbox[1] x (width - text_width) // 2 y (height - text_height) // 2 draw.text((x, y), text, fontfont, fill(0, 0, 0))这其实就是一个简易的居中算法——画布尺寸减去文字尺寸除以2就能让文字整体居中。你把这段代码跑通就已经学会了几乎所有Pillow项目的核心套路创建图片、创建画笔、用textbbox量尺寸、画上去、保存。提示textbbox返回的是一个四元组(left, top, right, bottom)而不是简单的宽高。很多人在网上搜到的代码写的是draw.textsize那个方法在新版Pillow中已经弃用了死记老代码会直接报错。5. 第二版画一个卡通表情让图片“活”起来光有文字的醒目感不够我们来给表情包加上表情图案。这里用Pillow的基本绘图API画一张“脸”——圆形脸、方形眼睛、弧线嘴巴。5.1 画脸和眼睛from PIL import Image, ImageDraw, ImageFont width, height 500, 500 img Image.new(RGB, (width, height), (255, 255, 255)) draw ImageDraw.Draw(img) # 画一个浅黄色的大圆脸 face_center (width // 2, height // 2) face_radius 150 face_bbox (face_center[0] - face_radius, face_center[1] - face_radius, face_center[0] face_radius, face_center[1] face_radius) draw.ellipse(face_bbox, fill(255, 224, 130), outline(0, 0, 0), width4) # 画两只黑色方眼睛 eye_size 30 left_eye_bbox (face_center[0] - 80, face_center[1] - 60, face_center[0] - 80 eye_size, face_center[1] - 60 eye_size) right_eye_bbox (face_center[0] 50, face_center[1] - 60, face_center[0] 50 eye_size, face_center[1] - 60 eye_size) draw.rectangle(left_eye_bbox, fill(0, 0, 0)) draw.rectangle(right_eye_bbox, fill(0, 0, 0)) img.save(face_base.png)这里用的ellipse函数你可以理解为“在给定的矩形内画它内切的椭圆”。矩形给的是正方形那画出来的就是正圆。想调整脸的胖瘦只需要把矩形的宽和高改成不同的值就行。5.2 添加嘴巴造型和文字嘴巴的做法比眼睛稍微曲折一点因为Pillow没有“直接画张嘴”的API但可以用arc画弧线或者用pieslice画半圆来模拟张开的嘴。# 用弧线画一个微笑的嘴0到180度从左边转到右边 mouth_bbox (face_center[0] - 60, face_center[1] 30, face_center[0] 60, face_center[1] 90) draw.arc(mouth_bbox, start0, end180, fill(0, 0, 0), width6) # 加载中文字体并写字 font ImageFont.truetype(fonts/msyh.ttc, size40) draw.text((50, 420), 礼貌但不太想理你, fontfont, fill(0, 0, 0)) img.save(face_meme.png)arc画弧线有几个参数start是起始角度end是结束角度。这里的0到180是从3点钟方向逆时针转到9点钟方向正好经过6点钟方向——也就是画出一个向下弯的弧线像个笑脸。反过来start180, end360就是向上弯的弧线可以做成“不开心”的嘴巴。到这里你已经能控制三种基本绘图能力椭圆/圆形、矩形、弧线。再加上文字这四种能力基本能组合出大部分你想要的表情——比如把眼睛画成两个竖条就是经典的“无语”表情把嘴巴改成大椭圆就是惊讶脸。表情包的核心不是绘画功底而是这些基本图形参数的微调。6. 批量生成与动图进阶把表情包做成系列做出一张之后大多数人很快就会觉得“单张不够用”想要一个系列。这里我给出两条进阶路径批量生成和动图。6.1 用循环批量生成不同文案把刚才的代码整体包进一个函数然后用循环跑一遍就行了。这一步顺便能让你体验一下“用函数封装重复逻辑”的好习惯。def make_meme(text_content, filename): width, height 500, 500 img Image.new(RGB, (width, height), (255, 255, 255)) draw ImageDraw.Draw(img) # 画脸、眼睛、嘴巴...省略与上面相同 font ImageFont.truetype(fonts/msyh.ttc, size40) draw.text((50, 420), text_content, fontfont, fill(0, 0, 0)) img.save(filename) texts [好的收到, 你不对劲, 表示怀疑, 内心毫无波澜] for i, t in enumerate(texts): make_meme(t, fmeme_{i}.png)这就是一个简单版的“模块化”思想——把重复的画图逻辑收进函数里主程序只负责传不同的文案和文件名。这个习惯在后续写爬虫、写数据处理脚本时都能用上。函数定义这个知识点很多新手在练习题里觉得抽象放在这个场景里就特别直观。我建议你把texts这个列表换成自己的创意文案比如工作群里常用的“需求收到正在处理”“这周一定发版”“我没事我装的”。做出来的图直接就能用很有成就感。6.2 多帧合成GIF动图动图表情包的市场份额有多大不用我说。Pillow不仅能生成静态图还能把多张图合成为GIF。思路是这样的生成N帧画面每一帧的表情有细微差别——比如眼睛大小变化、嘴巴弧度变化——然后把这些帧按顺序保存为GIF。frames [] for i in range(5): # 每帧新建画布 img Image.new(RGB, (300, 300), (255, 224, 130)) draw ImageDraw.Draw(img) # 眼睛大小随帧变化 eye_size 10 i * 6 eye_y 90 draw.rectangle((90, eye_y, 90 eye_size, eye_y eye_size), fill(0, 0, 0)) draw.rectangle((210 - eye_size, eye_y, 210, eye_y eye_size), fill(0, 0, 0)) # 嘴巴位置随帧上移模拟说话的动态 mouth_y 150 i * 4 draw.arc((110, mouth_y, 190, mouth_y 40), start0, end180, fill(0,0,0), width4) frames.append(img) # 保存动图duration参数控制每帧时长单位毫秒 frames[0].save(blink.gif, save_allTrue, append_imagesframes[1:], duration200, loop0)这里最关键的是save_allTrue和append_imagesframes[1:]这两个参数。前者告诉Pillow要把所有帧都保存进去后者声明“除了第一张之外后续帧是哪些”。duration200表示每帧显示200毫秒大概一秒5帧的速度这个速度在聊天表情里比较合适。实测下来我这个眨眼嘴巴微动的GIF做出来之后发到群里确实比静态图效果好得多。做动图的进阶方向还有把表情图片拼到大模板上、把多张已有图片合成为GIF等。7. 避坑实录我在表情包生成路上遇到的四个连环坑最后分享几个实际运行中容易出的问题。这些坑不算复杂但每个都足够劝退新手五分钟而且网上答案经常各说各话。7.1 中文乱码 “方框字”就是前面提到的字体问题。核心解法就一个ImageFont.truetype()必须传一个真实存在的、支持中文的字体文件路径。我自己的经验是与其在系统字体目录里找半天不如直接把字体文件复制到项目目录里然后用相对路径引用。font ImageFont.truetype(fonts/msyh.ttc, size40)如果你用Windows但找不到msyh.ttc可以打开C:\Windows\Fonts按名称搜索“Microsoft YaHei”其他字体也可以但要注意部分旧字体比如宋体在某些笔画多的字渲染时会有毛边。7.2 运行时提示“module PIL has no attribute”这个报错通常是导入写法的问题。正确写法是from PIL import Image, ImageDraw, ImageFont有些人从老旧教程抄成import PIL然后PIL.Image.new()就会触发这个错误。这是历史遗留的兼容性问题记住用from PIL import ...就行。7.3 保存GIF重影严重如果保存动图时发现画面“又残又糊”多半是GIF格式的颜色数限制问题。GIF最多支持256色颜色过渡柔和的图片在转GIF时会出现颜色条带。解决方法是把duration调大一点比如300毫秒或者在绘制时特意选用对比强的颜色减少中间过渡色。此外如果只想压缩静态图的体积可以调整保存参数img.save(compressed.png, optimizeTrue)这个压缩在表情包这种大面积纯色的场景下特别有效。我做过一个测试同一张PNG表情图优化前是800KB优化后只有120KB画质几乎无差别。群聊表情包发多了微信对体积有一定限制这个参数很实用。7.4 做好的表情包背景是黑色/白色方块不够“透”很多人想让表情包变成透明背景这样贴到聊天背景上不会突兀。这时候就会用到RGBA模式。一个常见的做法是创建画布时用RGBA模式然后背景颜色设置为(0, 0, 0, 0)最后的0就是完全透明。width, height 400, 400 img Image.new(RGBA, (width, height), (0, 0, 0, 0)) draw ImageDraw.Draw(img) # 画内容... draw.ellipse((50, 50, 350, 350), fill(255, 224, 130, 255)) # 保存为PNG透明背景就保留了 img.save(transparent_meme.png)这里有一个必须注意的坑透明背景只有PNG和GIF支持保存成JPG会直接变黑底或白底。因为JPG格式根本不含Alpha通道信息。很多新手习惯把所有图片都存成.jpg结果透明背景当场翻车。RGB和RGBA的选择我再说一遍如果不是特殊需要静态图就用RGB省空间要做透明背景或者需要半透明叠加效果的才用RGBA。如果RGBA图片在保存时出现“无法保存”的报错检查一下你是不是选了JPG格式以及确认透明通道的值是否设置正确。8. 关于这个项目的后续扩展给正在痒的新手到这里你已经掌握了Pillow生成静态图和动图的核心能力。表情包项目的好处是它的营养密度高——你学会了图片创建、文字渲染、图形绘制、居中算法、多帧合成这些技能拿去做知乎封面图、公众号头图、活动海报都是同一套方法论。如果这个项目激起了你“继续折腾”的兴趣我个人提供三个按难度递增的扩展方向第一步给表情包加边框。用draw.rectangle在画布四边画一圈粗线就是聊天里常见的“贴纸感”边框。第二步批量把现有表情包的文案替换掉。利用str.replace逻辑和一个文本列表几十张图几秒就输出完了。第三步尝试用numpy配合Pillow做像素级操作——比如把表情包变成马赛克风格。这一步的成就感非常大因为你的作品开始有点“程序化艺术”的感觉了。不过这属于进阶内容等你把Pillow基础打稳了再碰也不迟。装环境、写代码、踩坑、修Bug、输出成果一套完整的开发流程走下来你的Python入门进度其实已经超过了大部分“学了三个月还在看语法视频”的人。先做出能用的东西让代码跑起来再回去看理论很多事情会比你想的顺畅得多。

相关新闻

金融级分布式数据库选型:从市场报告到可验证工程实践

金融级分布式数据库选型:从市场报告到可验证工程实践

简介:本资源是沙利文与头豹研究院联合发布的《2024年中国金融级分布式数据库市场跟踪报告》,面向金融行业技术决策者、数据库厂商产品与战略负责人、监管及政策研究机构、投资分析人员等专业群体,聚焦解决金融机构核心系统选型依据不足、安全…

2026/10/9 16:33:50 阅读更多 →
GoldenDict跨平台本地词典工具深度指南

GoldenDict跨平台本地词典工具深度指南

1. 为什么查词这件事,值得你花十分钟装一个真正好用的工具?GoldenDict 不是又一个“点开就查、关掉就忘”的在线词典网页,它是一个能扎根在你系统底层、随叫随到、不联网也能秒出结果、支持上百种词典格式、还能自定义发音和排版的本地化查词…

2026/10/9 16:33:50 阅读更多 →
PyCharm Python解释器与项目结构配置避坑指南

PyCharm Python解释器与项目结构配置避坑指南

简介:这是一份面向Python初学者的PyCharm集成开发环境入门教程,聚焦开发前必备操作与高频使用场景,解决新手安装后不知如何创建项目、运行代码、识别错误及安装第三方库等实际问题。资源为单文件PDF文档(492KB)&#x…

2026/10/9 16:33:50 阅读更多 →

最新新闻

聚宽SQL数据同步:基于MySQL中转库的增量管道实践

聚宽SQL数据同步:基于MySQL中转库的增量管道实践

简介:面向量化交易与金融数据分析人员,这份压缩包围绕聚宽平台SQL接口的数据传递与中转操作,整理了一套可直接参考的轻量资料,用于解决从聚宽取数到中转数据库落地的需求。包内共3个文件,包含Python脚本、XML配置及rzr…

2026/10/9 17:30:43 阅读更多 →
OCP 19c 083备考:多租户、RMAN与Data Pump实战要点解析

OCP 19c 083备考:多租户、RMAN与Data Pump实战要点解析

简介:面向Oracle OCP 19c-083考试的复习资料,围绕数据库日志恢复、警报监控、网格基础设施升级、PGA内存管理等核心考点展开。内容基于考试真题整理,对Flashback日志空间回收条件、服务器生成警报的手动清除与历史清理、升级网格基础架构的注…

2026/10/9 17:30:43 阅读更多 →
GPT-4.1 Nano 核心能力与实战效果全景展示:把 Codex auth.json 改到 TaoToken

GPT-4.1 Nano 核心能力与实战效果全景展示:把 Codex auth.json 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 17:30:41 阅读更多 →
微电网二次控制中的延迟问题:诊断、稳定性影响与工程补偿策略

微电网二次控制中的延迟问题:诊断、稳定性影响与工程补偿策略

微电网的二次控制,说白了就是给整个系统“扶正纠偏”的环节。一次下垂控制把功率分好了,但也留下了频率偏差和电压偏差;二次控制就是那个负责把偏差抹掉的“执行者”。可问题来了,这台执行者一旦患上了“拖延症”——从采样、通信…

2026/10/9 17:30:41 阅读更多 →
ExtJS组件化框架实战:从创建组件到布局通信与封装复用

ExtJS组件化框架实战:从创建组件到布局通信与封装复用

ExtJS 很早就被贴上了"重、老、贵"的标签,很多人一听到它就直接劝退。但如果你真的花时间用过它的组件体系,会有一个完全不同的感受:这根本不是一袋子散装控件,而是一套纪律严明的组件化框架。刚开始被那一堆类名和配置…

2026/10/9 17:30:39 阅读更多 →
数据库物理模型设计实战:字段类型、索引策略与分区方案落地指南

数据库物理模型设计实战:字段类型、索引策略与分区方案落地指南

简介:这份资源聚焦数据库物理模型设计,面向数据库设计人员、后端开发与数据建模学习者,帮助读者理解如何将逻辑模型落地到实际存储系统,兼顾性能优化、存储效率与数据管理。内容以四种核心设计模式为线索,重点讲解主扩…

2026/10/9 17:29:37 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →