No description
  • TypeScript 79.9%
  • Rust 18.5%
  • CSS 1.1%
  • JavaScript 0.5%
Find a file
2026-06-15 18:12:16 +08:00
cloudflare-worker Initial commit 2026-06-15 18:12:16 +08:00
wasm/image_wasm Initial commit 2026-06-15 18:12:16 +08:00
web Initial commit 2026-06-15 18:12:16 +08:00
.gitignore Initial commit 2026-06-15 18:12:16 +08:00
README.md Initial commit 2026-06-15 18:12:16 +08:00

PicBind

PicBind 是一个基于 Rust WASM 和 Next.js 的在线图片工具站。当前重点功能是浏览器端图片压缩和 favicon 生成,图片处理尽量在本地完成,减少服务端依赖,方便部署到 Cloudflare Pages。

当前功能

  • 图片压缩:支持 PNG、JPEG、WebP、AVIF支持批量上传、自动压缩、单文件下载和 ZIP 打包下载。
  • 压缩质量分析:在浏览器 Worker 中分析压缩前后的质量指标,用于辅助判断输出效果。
  • Favicon Converter上传图片生成 favicon 图标包。
  • Favicon Generator通过文字、Google Fonts 字体、字重、颜色和背景形状生成 favicon 图标包。
  • Favicon 打包:生成 favicon.ico、16/32 PNG、Apple touch icon、Android chrome icon 和 site.webmanifest
  • 中英文切换:首页和 favicon 工具页均支持中文/英文文案。
  • 静态部署Web 项目已配置为 next export 风格输出,适合部署到 Cloudflare Pages。
  • Worker API 骨架:统计、访问量、后台配置、百度推送接口已迁移到独立 Cloudflare Worker 目录。

项目结构

.
├── cloudflare-worker/      # Cloudflare Worker API 服务骨架
├── wasm/image_wasm/        # Rust WASM 图片处理库
└── web/                    # Next.js 前端应用

Web 应用

Web 应用位于 web/,主要页面包括:

  • /:图片压缩首页。
  • /favicon-converter:从图片生成 favicon。
  • /favicon-generator:从文字生成 favicon。
  • /admin:当前为静态占位页,后台接口后续由 Worker 接入。

常用命令:

cd web
npm install
npm run dev
npm run build

构建输出会生成到 web/out/,可作为 Cloudflare Pages 的静态产物目录。

WASM 构建

Rust WASM 代码位于 wasm/image_wasm/。修改 Rust 图片处理逻辑后,需要重新构建 WASM

cd web
npm run wasm:build

生成文件会输出到:

web/public/wasm/

Cloudflare Pages 部署

当前 Web 侧已移除 Next 内置 API 路由和 Docker 部署配置,适合按静态站点部署到 Cloudflare Pages。

推荐配置:

Build command: cd web && npm install && npm run build
Build output directory: web/out

如果 Cloudflare Pages 的项目根目录直接设置为 web/,则可以使用:

Build command: npm install && npm run build
Build output directory: out

Cloudflare Worker API

Worker 服务位于 cloudflare-worker/,用于替代旧的 Next API 路由。

当前 Worker 兼容这些接口:

GET  /api/metrics
POST /api/metrics
POST /api/site/view
GET  /api/admin/state?key=...
POST /api/admin/state?key=...
POST /api/seo/baidu/push?key=...

Worker 使用 Cloudflare KV 保存统计和页面配置。需要绑定:

METRICS_KV

可选环境变量:

ADMIN_KEY
SITE_URL
ALLOWED_ORIGINS
BAIDU_PUSH_SITE
BAIDU_PUSH_TOKEN

前端当前默认不请求统计 API。Worker 部署完成后,可在 Pages 环境变量中开启:

NEXT_PUBLIC_METRICS_ENABLED=true
NEXT_PUBLIC_METRICS_API_PATH=https://api.picbind.com/api/metrics
NEXT_PUBLIC_PAGE_VIEW_ENABLED=true
NEXT_PUBLIC_PAGE_VIEW_API_PATH=https://api.picbind.com/api/site/view
NEXT_PUBLIC_ADMIN_STATE_API_PATH=https://api.picbind.com/api/admin/state

推荐的 Worker 环境变量:

SITE_URL=https://picbind.com
ALLOWED_ORIGINS=https://picbind.com,https://www.picbind.com
BAIDU_PUSH_SITE=https://picbind.com
ADMIN_KEY=<your-admin-key>
BAIDU_PUSH_TOKEN=<your-baidu-token>

Favicon 资源

网站自己的 favicon 资源统一放在:

web/public/images/favicon/

包括:

favicon.ico
favicon-16x16.png
favicon-32x32.png
apple-touch-icon.png
android-chrome-192x192.png
android-chrome-512x512.png
site.webmanifest

设计原则

  • 图片处理优先在浏览器本地完成。
  • WASM 承担重计算和图像编码逻辑。
  • 前端页面保持可静态导出,减少部署复杂度。
  • 动态统计和管理能力迁移到 Cloudflare Worker。
  • 不再使用 Docker 部署。