绘制与图像——程序绘制、绘画软件与画师的区别,从像素到 2D 人物

一句话

区别不在于能不能画,而在于「谁负责画」以及「画的方式」——程序写代码画、绘画软件人拿画笔画、画师靠创作。它们最终得到的都是像素图,只是创作方式不同。


一、四层定位:图形库的层次

层次 作用 Python C++
图片处理 图片读写、格式解析、像素处理 Pillow、OpenCV OpenCV、FreeImage、stb_image
二维绘图 二维图元绘制(线/矩形/圆/文字/曲线) Cairo、Skia、Matplotlib Skia、Cairo、NanoVG
GPU 渲染 高性能实时渲染 ModernGL、PyOpenGL OpenGL、Direct3D、Vulkan
游戏渲染 游戏场景渲染 pygame、pyglet SDL、SFML、raylib

图片库 vs 图形 API 的最大区别

图片库(Pillow、OpenCV):内存里修改像素 → 保存。

1
图片 → 修改像素 → 保存

GPU 图形 API(OpenGL/D3D/Vulkan):告诉显卡应该画什么,实时渲染。

1
顶点 → Shader → GPU → 屏幕

画 100 万个三角形:Pillow 是 CPU 一个像素一个像素算;OpenGL 是 GPU 几千个核心一起算,效率差很多。

OpenGL 不是不能生成图片,而是默认目标是实时显示,不是文件。(GPU → FrameBuffer → glReadPixels → CPU → PNG 编码 → 保存 也可以生成图片。)

Pillow 的 Image + ImageDraw

它就是在内存里建一块像素缓冲区,draw.line() 实际上是不停修改这些像素,img.save() 把像素编码成 PNG/JPEG。所以 Pillow 的 Image + ImageDraw 更接近 C++ 中的 Skia 或 Cairo(CPU 绘制),而不是 OpenGL/D3D(GPU 实时渲染)。


二、程序绘制 vs 绘画软件 vs 画师

第一种:程序绘制(Pillow、ImageDraw)

1
2
3
4
draw.line(...)
draw.circle(...)
draw.rectangle(...)
draw.text(...)

程序告诉计算机「在 (100,100) 到 (200,100) 画一条红线」。画的是规则图形:流程图、表格、图表、棋盘、二维地图、像素字体、图标。

第二种:PS、Krita、SAI 等绘画软件

本质上也是修改像素。用画笔画一笔,实际上发生的是:鼠标轨迹 → 画笔算法 → 计算笔刷形状 → 混色 → 透明度 → 修改像素。

Pillow 和 Photoshop 最终得到的都是一张像素图(Raster Image)。 区别只是:Pillow 程序写代码画,Photoshop 人拿画笔画。

第三种:专业画师

画师不是在调 draw.line(),而是在调整颜色、透明度、压力、混色、涂抹、模糊、图层、蒙版、滤镜。

关键结论

  • Pillow 不是只能画简单的像素图——可以生成 Mandelbrot 分形、分形树、柏林噪声、地形、星空、程序生成艺术。复杂程度取决于算法,而不是库。
  • Photoshop 和画师也是在最终修改像素,只不过通过丰富的画笔、图层和交互工具完成,而不是直接写代码。
  • 真正的区别是创作方式:Pillow 是代码驱动,Photoshop 是交互式绘制。最终保存的通常都是同一种类型的像素图片。

三、从像素图到 2D 人物形象的十阶段

不是突然从「画线」变成「画人物」,而是不断叠加更高级的绘制能力。

1
2
3
4
5
6
7
8
9
10
① 基本图元    点、线、矩形、圆、多边形
② 颜色与填充 填充色、渐变、描边
③ 曲线 贝塞尔曲线、样条曲线(人物几乎没有真正的直线)
④ 笔刷 鼠标轨迹→笔刷→纹理→修改像素(PS 笔刷=一张灰度图不断「盖章」)
⑤ 图层 背景/人物/头发/衣服/阴影/高光/特效,每层独立最后合成
⑥ 混色 Alpha 混合、颜色空间、图层模式(Multiply/Overlay/Screen)
⑦ 光影 光源→法线→阴影→高光,人物开始有立体感
⑧ 纹理 皮肤纹理、布料纹理、木纹、金属
⑨ 人体结构 骨骼、肌肉、比例、五官、透视(已经不是程序问题,是美术)
⑩ 绘画经验 大量练习形成的内在模型

前八个阶段是程序问题(算法),后两个阶段是美术问题(知识)。

开发 2D 绘图软件的建议实现顺序

如果目标是自己开发一个二维绘图软件,不要一开始就追求「能画出画师作品」,而是按能力逐层实现:

1
2
3
4
5
6
7
8
9
10
1. 像素缓冲区(Image)
2. 基本图元(点、线、矩形、圆、多边形)
3. 贝塞尔曲线
4. 图层
5. 画笔系统(最重要的功能之一)
6. 颜色混合与 Alpha
7. 滤镜
8. 撤销/重做
9. 选区与变换
10. 纹理画笔和高级笔刷

很多专业绘图软件的发展也是类似路线。等拥有了画笔、图层、混色、纹理等能力后,再配合画师的美术基础,就能创作出「自然」「好看」的二维人物形象。程序提供的是工具,人物是否生动、美观,还依赖于人体结构、色彩、光影和构图等艺术知识——所以实现顺序到「画笔/图层/混色/纹理」为止是程序问题,再往上就是美术问题。


四、从软件架构角度的职责分层

  • 图片库:负责图片读写、格式解析、像素处理(PNG、JPEG、缩放、裁剪、滤镜)
  • 绘图库:负责二维图元绘制(线段、矩形、圆、文字、Bezier 曲线)
  • 图形 API:负责高性能实时渲染,把图元和图片显示到屏幕
  • GUI 框架:负责窗口、按钮、菜单、事件处理等界面功能

这种分层在 Python 和 C++ 中都成立,区别主要在于:Python 更适合快速验证业务和算法,C++ 更适合构建高性能、长期维护的图形系统。对于「先验证业务、再迁移到 C++」的思路,这是很多团队会采用的一种开发方式。


与其他线的关系

  • 与图像生成的领域模型线:本线讲「用什么画」(工具层),领域模型线讲「画什么、怎么保证一致」(模型层)——语言→领域模型→绘制器,绘制器是本线
  • 与领域对象分析主题:从自然语言拆出 Person/Dress/Tree/Sun/Ground 领域对象,再到 Bezier→Rasterize→Pixel→PNG,绘制器是最后一段
  • 与游戏系统论:游戏资源生产(美术子流程)的最终产物都是像素图/模型资产,绘制与图像线是它的工具基础