Piskel — Web 像素艺术编辑器
待复核Piskel 是一个在浏览器里画像素画、做逐帧动画、再导出给游戏或网页使用的编辑器。
日常类比:Aseprite 像专业像素画工作台,Piskel 更像一张打开网页就能用的方格动画本。你不必先装一整套设计软件,打开浏览器就能画角色、调帧、预览动画。
它的核心对象是 sprite,也就是游戏里常见的角色、道具、按钮、爆炸特效那种小图。Piskel 支持图层、帧、实时预览、GIF/PNG/sprite sheet 导出,也有离线桌面版。
官方 README 说它由 JavaScript、HTML、CSS 写成,并且就是 piskelapp.com 背后的编辑器。GitHub 上约 ~11k stars,说明它不是玩具 demo,而是很多初学者和独立游戏开发者真正用过的轻量工具。
一句话定位:Piskel 是“浏览器即开即画”的像素动画编辑器,适合把像素图从练习稿推进到可交付素材。
不理解 Piskel,下面这些事会很难解释:
- 为什么像素画工具不只是“画布变小”,还要有帧、图层、调色板和实时动画预览
- 为什么网页技术也能做绘图软件:Canvas 保存像素,JavaScript 管工具状态,ZIP/GIF/PNG 库负责导入导出
- 为什么游戏项目常要 sprite sheet,而不是把每一帧都散落成一堆文件
- 为什么“免费在线工具”仍然需要考虑浏览器支持、离线备份、移动端限制和导出流程
-
画布是棋盘格:每个格子就是一个像素,铅笔、橡皮、油漆桶都在改这些格子的颜色。类比给乐高底板换积木,细节全靠一个个格子摆出来。
-
帧是翻页动画:第 1 帧站立,第 2 帧抬脚,第 3 帧迈步,快速播放就变成动作。类比小时候在书角画小人,快速翻页看到它在跑。
-
导出是交货单:Piskel 里保存的是可编辑工程,游戏或网页需要的是 PNG、GIF、ZIP 或 sprite sheet。类比厨房保留菜谱和半成品,给顾客只交能直接吃的成品。
Piskel 的价值不在于功能堆满,而在于把“学习像素画、做简单动画、导出给项目”这条路缩短。
案例 1:本地跑起 Piskel,给离线环境用
Section titled “案例 1:本地跑起 Piskel,给离线环境用”如果你想确认项目不是黑盒,可以直接从官方仓库启动开发版:
git clone https://github.com/piskelapp/piskel.gitcd piskelnpm installnpm run buildnpm start逐部分解释:
git clone拉下源码,Piskel 本体就是网页应用,不需要原生图形库才能看懂npm install安装构建工具和依赖,例如 Vite、Playwright、Biome、GIF/PNG 相关库npm run build生成生产版静态资源,官方桌面版和 CLI 也依赖这类构建产物npm start构建后启动本地服务,你可以在浏览器里打开编辑器- 这条路适合学习源码、离线演示、修小 bug,不适合把未确认的大改动直接塞进上游
从零基础角度看,这个案例说明:Piskel 不是“会联网的神秘工具”,它就是一套前端代码加像素数据模型。
案例 2:用官方 CLI 把 .piskel 导出成 sprite sheet
Section titled “案例 2:用官方 CLI 把 .piskel 导出成 sprite sheet”假设你在网页里保存了 hero.piskel,构建游戏时可以用 CLI 生成贴图:
npm install -g https://github.com/piskelapp/piskel/tarball/masterpiskel-cli hero.piskel --scale 4 --columns 4 --crop --dest dist/hero.pngpiskel-cli hero.piskel --frame 0 --dest dist/hero-idle-0.png逐部分解释:
npm install -g ...按官方 CLI 文档安装全局命令piskel-clihero.piskel是 Piskel 的可编辑工程文件,不是最终游戏贴图--scale 4用整数倍放大,像素边缘会保持硬朗,不会变成糊边照片--columns 4把多帧排成 4 列,方便游戏引擎按网格切帧--crop去掉透明边框,能让输出更紧凑,但也可能改变帧的对齐假设--frame 0只导出第 0 帧,适合做头像、占位图或调试第一帧
这就是 Piskel 从“画图工具”进入“工程流水线”的关键:源文件由人编辑,产物由命令生成。
案例 3:把导出的 sprite sheet 接进网页游戏
Section titled “案例 3:把导出的 sprite sheet 接进网页游戏”导出 dist/hero.png 后,游戏代码通常只需要知道每帧多大、动画范围在哪里。以 Phaser 风格代码为例:
this.load.spritesheet("hero", "assets/hero.png", { frameWidth: 32, frameHeight: 32});
this.anims.create({ key: "run", frames: this.anims.generateFrameNumbers("hero", { start: 0, end: 5 }), frameRate: 12, repeat: -1});逐部分解释:
frameWidth/frameHeight必须等于 Piskel 里单帧的逻辑尺寸,不是导出后整张图的尺寸start: 0, end: 5表示第 0 到第 5 帧组成跑步动作frameRate: 12和 Piskel 里的预览 FPS 要保持接近,否则网页里会快慢不一致repeat: -1表示循环播放,适合 idle、run、loading 这类连续动作- 如果你在 Piskel 里改了帧数量,游戏代码里的范围也要跟着改
这个案例说明:Piskel 不负责运行游戏,它负责把像素动画整理成运行时容易读取的素材。
- 把浏览器存储当永久保存:本地浏览器数据可能被清理,重要作品要下载
.piskel文件或用离线版保存。 - 在手机或平板上硬用:官方 README 明确说移动端不支持,触控和小屏会让绘制体验很差。
- Brave 浏览器画布保护没关:Brave 需要关闭 canvas fingerprinting 相关保护,否则基于 Canvas 的编辑器可能异常。
- 导出时忘记帧尺寸契约:sprite sheet 只是大图,引擎切帧靠宽高数字;Piskel 改尺寸后代码也要同步。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 初学者第一次学像素画、逐帧动画、sprite sheet 导出
- 独立游戏的小角色、道具、UI 图标、简单特效
- 教室、工作坊、临时电脑上快速演示“像素图怎么变成动画”
- 轻量工程流水线:网页里画,CLI 导出,游戏代码消费 PNG
不适用:
- 大型商业美术团队需要复杂笔刷、批量资产管理、专业色彩流程
- 主要做高清插画、照片修复、矢量 logo 或 3D 模型
- 移动端创作场景,Piskel 官方没有支持手机和平板
- 需要强版本化元数据、自动化命名规范、多人协作审稿的大型素材库
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2010s 早期:Piskel 作为轻量在线 sprite 编辑器出现,目标是让游戏 sprite 和像素动画更容易上手。
- piskelapp.com:项目从源码仓库走到公开网页工具,用户打开浏览器就能直接创建 sprite。
- 离线版阶段:桌面版使用 node-webkit 技术打包,官方 wiki 说明它能离线使用,功能和性能接近 Web 版。
- 工程化阶段:仓库提供 CLI 导出、Playwright 端到端测试、Biome lint 和 Vite 构建,说明它已经不只是静态网页。
- 今天:Piskel 仍然保留“小而直接”的路线,常被当作 Aseprite 的网页轻量替代品。
- 像素动画的核心对象是“帧序列”,不是单张漂亮图片。
- 浏览器里的 Canvas 足够承载一套轻量绘图工具,前端也可以做生产工具。
.piskel是可编辑源文件,PNG/GIF/ZIP/sprite sheet 是给外部系统的交付物。- 工具越轻量,越要自己养成备份、命名、导出尺寸一致的习惯。
- 官方仓库:piskelapp/piskel
- 在线编辑器:Piskel app
- 官方 CLI 文档:Piskel CLI
- 官方 wiki:Desktop applications
- 浏览器兼容说明:Brave canvas fingerprinting
- aseprite —— 更专业的像素动画工作台,适合对比 Piskel 的轻量路线
- tiled —— Piskel 画瓦片和小图,Tiled 把瓦片组织成地图
- pixi —— Pixi 负责 Web 2D 渲染,可以消费 Piskel 导出的贴图
- phaser —— Phaser 常用 sprite sheet 播放角色动画
- jimp —— Jimp 可在 Node.js 里批处理 PNG,补足 Piskel 的自动化后处理
- fabric-js —— Fabric.js 也是 Canvas 应用层库,可对比“编辑器状态如何映射到画布”
- konva —— Konva 抽象 Canvas 场景树,和 Piskel 的像素级编辑形成对照
(暂无反向链接)