Python图形编程实战:用Matplotlib与Pillow实现高精度矢量绘图
1. 项目缘起从网络热梗到编程实践最近在技术社区和社交媒体上经常能看到用各种编程语言绘制“坤坤”形象的项目这已经从一个网络热梗演变成了程序员们展示图形编程技巧的趣味竞赛。作为一个长期使用Python进行数据可视化和图形处理的开发者我也被这股风潮吸引了。但看了一圈发现很多作品要么是简单的线条勾勒辨识度不高要么就是直接贴图失去了“用代码绘画”的挑战性和技术趣味性。所以我决定自己动手用Python实现一个“高还原度”的版本。这里的“高还原”我的理解是在不借助任何外部图片资源的前提下完全通过代码计算和绘制生成一个在形态、神态和标志性特征上都高度接近原型的矢量图形。这不仅仅是一个娱乐项目更是一个综合运用Python图形库、坐标计算、颜色填充和曲线控制的绝佳练习。它涉及到对matplotlib、PILPillow等库的深度使用以及对贝塞尔曲线等图形学基础概念的理解。无论你是想学习Python绘图还是想找一个有趣的项目来练手这个过程都能让你收获不少。2. 核心工具选型为什么是Matplotlib Pillow要实现高精度绘图工具的选择至关重要。Python生态中绘图库众多我最终选择了MatplotlibPillow(PIL) 的组合这是经过深思熟虑的。2.1 Matplotlib精准控制的基石Matplotlib虽然是科学绘图的首选但其底层的路径Path和补丁Patch对象提供了极其强大的矢量图形创建能力。这正是我们项目需要的核心。路径Path与补丁PatchMatplotlib的Path对象可以定义由直线、二次/三次贝塞尔曲线构成的复杂轮廓。Patch则是将这些路径填充颜色或绘制边框的实体。通过精确计算路径的控制点我们可以绘制出光滑、准确的曲线这是还原复杂发型、脸部轮廓的关键。坐标系统与变换Matplotlib提供了完整的坐标变换体系。我们可以先在一个逻辑坐标系比如-10到10中舒适地设计图形然后通过变换轻松地输出到任意分辨率的图像上保证了绘制的灵活性和精度。强大的颜色与样式控制支持RGBA色彩空间可以轻松设置透明度Alpha通道这对于实现头发丝缕感、阴影过渡等效果非常重要。单纯使用Matplotlib的plot函数画线是无法实现复杂填充图形的必须深入到Path和Patch这一层。2.2 Pillow (PIL)后期合成与输出的利器Pillow是Python事实上的图像处理标准库。它在这个项目里扮演了两个重要角色画布创建与底层像素操作虽然Matplotlib可以保存图像但Pillow在创建纯色画布、进行像素级混合如柔光、叠加时更加直观和高效。我们可以用Pillow创建背景层。多图层合成高还原度绘图往往需要分层绘制。例如先画脸部底色再画头发再画五官。Matplotlib虽然能画但将所有元素组织到一个Figure中并分层管理有时不如先用Pillow的Image和ImageDraw模块分别绘制各个部件尤其是包含大量复杂曲线时最后进行合成来得清晰。最终输出与格式控制Pillow提供了丰富的图像保存选项和格式支持方便我们将成品输出为PNG支持透明背景、JPEG等格式。为什么不选其他库PyGame / Arcade更适合动态游戏和实时交互图形用于静态高精度绘图有点“杀鸡用牛刀”且对矢量曲线的原生支持不如Matplotlib的Path直接。OpenCV核心能力是计算机视觉和图像处理用于“生成”图像需要手动计算每个像素过程过于繁琐。Turtle过于初级适合教学演示无法胜任需要精确坐标和复杂曲线填充的任务。因此Matplotlib负责核心的矢量轮廓生成与填充Pillow负责背景管理和最终合成是这个项目最合理、最强大的技术组合。3. 拆解绘制蓝图从轮廓到细节的工程化思路拿到一个形象直接开始写代码是行不通的很容易陷入混乱。我采用的是“分形拆解逐层绘制”的工程化方法。3.1 形象特征分析与模块分解首先我们需要对目标形象进行视觉分解将其拆解为多个独立的、可绘制的图形模块。以“坤坤”的某个经典形象为例可以分解为头部轮廓一个近似椭圆但带有下巴曲线的形状。发型这是最具挑战性的部分通常包含额前刘海、两侧鬓发和顶部发簇由多个复杂的曲线块组成。面部五官眼睛可能包含上眼睑、下眼睑、眼球、高光。眉毛两道有弧度的曲线。鼻子简化为一个倒“V”形或小三角形阴影。嘴巴一条有张力的曲线可能包含上下唇。服饰与配饰例如衣领、项链等简单几何形状。阴影与高光用于增加立体感通常通过半透明的色块或渐变来实现。3.2 坐标系的建立与规划在代码中我们需要建立一个统一的虚拟坐标系。我通常将画布逻辑中心设为(0,0)并根据形象比例确定一个范围例如X和Y轴都从-12到12。这样做的好处是比例容易控制所有部件的坐标都在一个可管理的数值范围内。易于调整如果想整体放大或移动只需调整坐标变换参数无需修改每个点的坐标。与分辨率解耦逻辑坐标与最终输出的像素坐标分离方便生成不同分辨率的图像。接下来就需要像建筑师一样为每个模块的关键路径点估算坐标。这是一个需要反复调试的过程。实操心得获取坐标的“笨”方法最直接的方法不是凭空想象而是“逆向工程”。找一张清晰的参考图用图片编辑软件如Photoshop、GIMP甚至画图工具打开打开网格线或标尺。将图片中心对齐然后手动读取关键点如发尖、眼角、嘴角的大概坐标记录下来作为代码的初始值。虽然费时但这是最靠谱的起点。3.3 绘制顺序Z轴顺序的确定图形绘制是覆盖式的后绘制的图形会盖在先绘制的图形之上。因此必须规划好从底层到顶层的绘制顺序。通常的顺序是背景层头部轮廓作为面部基础头发大部分覆盖在头部之上但发际线部分需要精确五官眼睛、眉毛、鼻子、嘴巴服饰最顶层的细节如眼球高光、头发丝高光这个顺序保证了正确的视觉遮挡关系。4. 核心实现用代码“雕刻”头发与五官这是整个项目最核心、最体现技术含量的部分。我们将以最复杂的发型和眼睛为例详细讲解如何用Matplotlib的Path和Patch来实现。4.1 发型绘制贝塞尔曲线的艺术头发不是一块实心色块它需要有起伏的轮廓和内部的层次。我们使用三次贝塞尔曲线CURVE4来定义每一缕头发的轮廓。假设我们要绘制额前的一缕刘海它可能由4个关键点P0, P1, P2, P3定义的三次贝塞尔曲线构成其中P0是起点P3是终点P1和P2是控制点分别控制曲线在起点和终点的切线方向。import matplotlib.pyplot as plt import matplotlib.patches as mpatches import matplotlib.path as mpath import numpy as np # 定义绘制函数 def draw_hair_lock(ax, vertices, codes, color): 绘制一缕头发 ax: matplotlib的坐标轴对象 vertices: 路径顶点列表形如 [(x0,y0), (x1,y1), ...] codes: 顶点类型代码列表与vertices一一对应。 MOVETO: 移动到一个新起点 (1) LINETO: 画一条直线到该点 (2) CURVE3: 二次贝塞尔曲线需要一个控制点和一个终点(3) CURVE4: 三次贝塞尔曲线需要两个控制点和一个终点(4) CLOSEPOLY: 闭合路径 (79) color: 填充颜色 path mpath.Path(vertices, codes) patch mpatches.PathPatch(path, facecolorcolor, edgecolornone, lw0) # 无边线 ax.add_patch(patch) # 示例绘制一缕简单的三次贝塞尔曲线构成的发束 fig, ax plt.subplots(figsize(5,5)) ax.set_xlim(-10, 10) ax.set_ylim(-10, 10) ax.set_aspect(equal) ax.axis(off) # 定义顶点和代码 # 假设P0(0,0)为起点P3(4,0)为终点P1(1,3)和P2(3,3)为控制点形成一道拱形 vertices [(0, 0), (1, 3), (3, 3), (4, 0)] codes [mpath.Path.MOVETO, mpath.Path.CURVE4, mpath.Path.CURVE4, mpath.Path.CURVE4] draw_hair_lock(ax, vertices, codes, colorsaddlebrown) plt.show()一个完整的发型是由数十个这样的曲线块PathPatch组合而成的。每一块都有其特定的形状、颜色可能略有深浅变化以体现层次和位置。通过精心设计和调试这些vertices和codes就能逐渐“拼”出复杂的发型。4.2 眼睛绘制多层叠加的细节眼睛是传神的关键需要多层绘制来体现立体感。一个简化的眼睛可能包含以下层从底到顶眼白层一个扁平的椭圆或自定义形状的白色块。虹膜层一个较小的圆形颜色通常较深。瞳孔层虹膜中心更小的黑色圆。高光层一或两个小的白色圆形或椭圆形放置在瞳孔上方模拟反光这是让眼睛“有神”的灵魂之笔。def draw_eye(ax, center_x, center_y, width, height): 在指定中心点绘制一个简化的眼睛 # 1. 眼白 (底色) eye_white mpatches.Ellipse((center_x, center_y), width, height, facecolorwhite, edgecolorblack, linewidth1) ax.add_patch(eye_white) # 2. 虹膜 (假设眼睛看向正前方虹膜在中心) iris_radius height * 0.35 iris mpatches.Circle((center_x, center_y), iris_radius, facecolordarkbrown, edgecolornone) ax.add_patch(iris) # 3. 瞳孔 pupil_radius iris_radius * 0.5 pupil mpatches.Circle((center_x, center_y), pupil_radius, facecolorblack, edgecolornone) ax.add_patch(pupil) # 4. 高光 (左上角一个小白点) highlight_radius pupil_radius * 0.4 highlight_x center_x - pupil_radius * 0.3 highlight_y center_y pupil_radius * 0.3 highlight mpatches.Circle((highlight_x, highlight_y), highlight_radius, facecolorwhite, edgecolornone) ax.add_patch(highlight) # 在图上添加眼睛 fig, ax plt.subplots(figsize(5,5)) ax.set_xlim(-5,5) ax.set_ylim(-5,5) ax.set_aspect(equal) ax.axis(off) draw_eye(ax, -1.5, 0, 2.5, 1.2) # 左眼 draw_eye(ax, 1.5, 0, 2.5, 1.2) # 右眼 plt.show()通过调整各层形状、大小、颜色和位置可以表现出不同的眼神状态。5. 合成、优化与最终输出当所有部件都在Matplotlib的Axes中绘制完成后我们得到了一个矢量图形集合。但为了获得更好的输出效果和灵活性我们引入Pillow进行最终处理。5.1 从Matplotlib到Pillow ImageMatplotlib可以直接保存为图片但有时我们需要在Pillow中进行后期调整。可以将Matplotlib的图形先保存到内存缓冲区再用Pillow打开。import matplotlib.pyplot as plt from PIL import Image import io # 假设fig是已经绘制好所有图形的figure对象 fig, ax plt.subplots(figsize(8, 10), dpi150) # 设置高DPI获得清晰图像 ax.set_xlim(-12, 12) ax.set_ylim(-15, 15) ax.set_aspect(equal) ax.axis(off) # ... (这里调用所有绘制函数将图形添加到ax中) ... # 1. 保存到内存缓冲区 buf io.BytesIO() fig.savefig(buf, formatpng, dpi300, bbox_inchestight, pad_inches0, transparentTrue) # 透明背景 buf.seek(0) # 2. 用Pillow打开 matplotlib_image Image.open(buf) # 3. 可以创建一个纯色背景 bg_color (240, 240, 245, 255) # 浅灰色背景 background Image.new(RGBA, matplotlib_image.size, bg_color) # 4. 将matplotlib生成的图形透明背景合成到背景上 final_image Image.alpha_composite(background, matplotlib_image) # 5. 保存最终结果 final_image.save(ikun_final_output.png, PNG) # 关闭缓冲区 buf.close() plt.close(fig) # 关闭图形释放内存5.2 色彩优化与抗锯齿色彩直接使用‘black’,‘saddlebrown’这类颜色名可能不够准确。我通常会从参考图中吸色获取精确的RGB或RGBA值如(139, 69, 19, 255)代表深棕色这样还原度更高。抗锯齿Matplotlib在保存为栅格图像如PNG时默认会开启抗锯齿这使得曲线边缘平滑。通过savefig的dpi参数可以控制输出质量DPI越高图像越精细文件也越大。对于网络分享300 DPI通常足够。5.3 常见问题与调试技巧图形错位或比例失调根本原因是坐标计算错误。调试时务必打开坐标轴网格线。在绘制初期不要ax.axis(‘off’)而是使用ax.grid(True)。这样每个图形块的位置和大小一目了然方便调整坐标。ax.grid(True, linestyle--, alpha0.5) ax.set_xlim(-12, 12) ax.set_ylim(-15, 15)颜色覆盖问题Z-order如果后画的图形没有盖住先画的可能是zorder参数没设置。matplotlib中zorder值越大图形越靠上。可以手动为每个Patch设置zorder属性。patch mpatches.PathPatch(path, facecolorbrown, zorder10) # 头发层 ax.add_patch(patch)曲线不光滑贝塞尔曲线的控制点设置不合理。控制点决定了曲线的“张力”和方向。一个技巧是控制点通常不在最终的曲线上它们像磁铁一样把曲线“拉”向自己。多调整控制点的位置观察曲线的变化。性能问题如果图形非常复杂包含成千上万个Patch可能会影响渲染和保存速度。可以考虑将一些不会变化的、复杂的图形如头发合并成数量更少的、更大的Path对象或者最终采用栅格化输出后在Pillow中处理。6. 完整源码结构与解析下面提供一个高度简化的、结构完整的源码框架展示了从模块导入到最终合成的整个流程。真正的“高还原”代码可能长达数百行因为需要定义大量精确的坐标点。 ikun_drawer.py 高还原度Python绘制项目 - 核心框架 import matplotlib.pyplot as plt import matplotlib.patches as mpatches import matplotlib.path as mpath from PIL import Image import io import numpy as np def create_figure_axes(): 创建并设置画布和坐标轴 fig, ax plt.subplots(figsize(6, 8), dpi150) # 画布比例可根据需要调整 ax.set_xlim(-10, 10) ax.set_ylim(-12, 12) ax.set_aspect(equal) # 调试时打开网格最终输出时关闭 # ax.grid(True, linestyle:, alpha0.3) ax.axis(off) return fig, ax def draw_head_outline(ax): 绘制头部轮廓示例为一个椭圆 head mpatches.Ellipse((0, 0), 9, 11, facecolorpeachpuff, edgecolork, linewidth1.5, zorder1) ax.add_patch(head) def draw_complex_hair(ax): 绘制复杂发型此处为示意仅画几缕 # 第一缕头发 verts1 [(-2, 5), (-1, 7), (1, 7), (2, 5)] # 起点控制点1控制点2终点 codes1 [mpath.Path.MOVETO, mpath.Path.CURVE4, mpath.Path.CURVE4, mpath.Path.CURVE4] path1 mpath.Path(verts1, codes1) patch1 mpatches.PathPatch(path1, facecolorsienna, edgecolornone, lw0, zorder20) ax.add_patch(patch1) # 第二缕头发...实际需要很多缕 # verts2 ... # codes2 ... def draw_facial_features(ax): 绘制五官 # 左眼 left_eye mpatches.Ellipse((-2.5, 1), 1.8, 1.0, facecolorwhite, edgecolorblack, linewidth1, zorder10) ax.add_patch(left_eye) left_iris mpatches.Circle((-2.5, 1), 0.4, facecolordarkblue, zorder11) ax.add_patch(left_iris) # 右眼、眉毛、鼻子、嘴巴类似... def save_to_pillow_image(fig): 将matplotlib图形转换为Pillow Image对象透明背景 buf io.BytesIO() fig.savefig(buf, formatpng, dpi300, bbox_inchestight, pad_inches0, transparentTrue) buf.seek(0) pil_img Image.open(buf) buf.close() return pil_img def add_background_and_save(pil_img, bg_color(240, 240, 245)): 添加背景并保存最终图像 # 如果背景颜色需要透明度使用RGBA模式 background Image.new(RGB, pil_img.size, bg_color) # 因为matplotlib保存的是RGBA透明我们需要先转换 if pil_img.mode RGBA: # 将透明图形合成到背景上 # 注意这里PIL的alpha_composite要求都是RGBA模式 background background.convert(RGBA) final_img Image.alpha_composite(background, pil_img) else: final_img Image.alpha_composite(background.convert(RGBA), pil_img.convert(RGBA)) final_img.save(my_ikun_drawing.png, PNG) print(图像已保存为 my_ikun_drawing.png) return final_img def main(): 主函数组织整个绘制流程 print(开始绘制...) # 1. 初始化 fig, ax create_figure_axes() # 2. 按从底到顶的顺序绘制各部件 draw_head_outline(ax) # 底层头部 draw_complex_hair(ax) # 中层头发 draw_facial_features(ax) # 顶层五官 # 3. 调整图形布局确保所有内容都在视野内 # ax.autoscale_view() # 4. 转换为Pillow图像并保存 plt.tight_layout(pad0) vector_img save_to_pillow_image(fig) final_img add_background_and_save(vector_img) # 5. 清理 plt.close(fig) # 可选用Pillow显示一下 # final_img.show() print(绘制完成) if __name__ __main__: main()这个框架清晰地分离了各个功能模块。要提升还原度你需要做的就是精细化draw_complex_hair函数用大量的PathPatch块通过反复调整vertices和codes精确拼出发型。精细化draw_facial_features函数用更复杂的形状如Path定义的眼睑、嘴巴和更丰富的颜色层次如眼影、唇彩来刻画五官。添加更多细节在函数中添加绘制阴影、衣服纹理、配饰等细节的代码块。这个过程没有捷径就是不断的“编码-运行-观察-调整”循环。每一个高还原度的作品背后都是开发者对坐标和曲线的无数次微调。当你看到代码最终生成出神形兼备的图像时那种成就感是无可比拟的。这不仅仅是玩梗更是一次扎实的计算机图形学入门实践。

相关新闻

3分钟掌握视频硬字幕提取:本地OCR工具让字幕制作变得简单高效

3分钟掌握视频硬字幕提取:本地OCR工具让字幕制作变得简单高效

3分钟掌握视频硬字幕提取:本地OCR工具让字幕制作变得简单高效 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、…

2026/10/14 15:16:51 阅读更多 →
给芯片供应链装上“中国连接器”:EasyLink×TI/英飞凌对接案例

给芯片供应链装上“中国连接器”:EasyLink×TI/英飞凌对接案例

一、案例概览 芯片半导体行业的供应链具有“高价值、高频次、多环节”的特点:从芯片原厂(Fabless无晶圆厂/IDM集成器件制造商)到分销商、晶圆厂,再到下游客户,每一步的数据准确与否都直接影响产能计划、库存健康度和交…

2026/10/13 12:48:20 阅读更多 →
Oracle 11g 透明网关连接 SQL Server

Oracle 11g 透明网关连接 SQL Server

从安装配置到 ORA-28513 / ORA-28500 的分层排障实战 Oracle 客户端经 Oracle Server、Database Gateway 访问 SQL Server 基于 Oracle Database Gateway for Microsoft SQL Server 11.2.0.4(Windows) 更新日期:2026-07-30 摘要&#xff5c…

2026/10/13 15:24:27 阅读更多 →

最新新闻

2026年最新--区块链运营岗面试题库(100题)

2026年最新--区块链运营岗面试题库(100题)

一、行业趋势与运营思维(1-10题) 1. 2026年加密行业营销的核心趋势有哪些?请结合“用户质量优先”的转变,说明运营策略应如何调整。 2026年加密营销的7大核心趋势涵盖绩效营销、内容创作、渠道多元化、活动体验、激励机制以及AI驱动的运营。最关键的转变是:Fintech和Web…

2026/10/14 15:17:11 阅读更多 →
C# GPS定位到地图显示:NMEA解析、坐标转换与GMap.NET实战

C# GPS定位到地图显示:NMEA解析、坐标转换与GMap.NET实战

简介:面向C#开发者和GIS初学者的GPS定位与地图综合示例源码。项目基于.NET框架,展示如何使用GeoCoordinateWatcher获取NMEA GPS数据,并通过Bing Maps控件实现地图加载、缩放、平移及城市名地理编码定位,涵盖地图事件处理、UI布局、…

2026/10/14 15:17:11 阅读更多 →
HTML表单与表格实战:学生注册表单与课程表制作全解析

HTML表单与表格实战:学生注册表单与课程表制作全解析

做了几年前端开发,接手过不少新人带教和作业评审。说句实在话,不管后来技术栈换成React还是Vue,凡是能把HTML里的表单和表格玩明白的,上手业务系统的效率往往都不会太差。这两块看起来基础,里面的门道却一点也不少——…

2026/10/14 15:17:11 阅读更多 →
工业AI检测项目为何死于“全产线覆盖”?

工业AI检测项目为何死于“全产线覆盖”?

1. 那句“全产线覆盖”,到底杀死了什么我做了七八年机器视觉和上位机开发,前前后后参与过二十多个工业AI项目,从服装检测、3C外观检、到食品包装异物识别都碰过。如果让我总结这些项目失败的最大共性,不是算法不行,不是…

2026/10/14 15:17:11 阅读更多 →
微信小程序商城定制怎么落地?选型要点全拆解

微信小程序商城定制怎么落地?选型要点全拆解

其实, 微信小程序商城定制这事儿, 说起来就是搭建一套能够实现商品售卖、会员管理以及营销推广的线上商业闭环, 不要被“定制”这两个字给吓到了, 要知道现在的SaaS平台已经把所有的基础功能都变成了现成的模块状态, 这些模块大概占据了整体功能总量的百分之八十的比例, 因此, …

2026/10/14 15:17:11 阅读更多 →
fast-check 4.7.0 深度解析:stringMatching 支持 Unicode 属性转义与可逆的 json 生成器

fast-check 4.7.0 深度解析:stringMatching 支持 Unicode 属性转义与可逆的 json 生成器

开发工具测试 【免费下载链接】fast-check Property based testing framework for JavaScript (like QuickCheck) written in TypeScript 项目地址: https://gitcode.com/gh_mirrors/fa/fast-check 点击查看 免费下载 fast-check 4.7.0 是一个围绕"让生成器更…

2026/10/14 15:16:08 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →