运作方式

你的文件由你正在用的浏览器打开,从来不会被送去任何地方。

以下是实际运行的东西,按执行顺序排列,还有一分钟之内自己验证的方法。

文件是被读取,不是被上传

放入文件时,页面拿到的是一个 File 对象,用 File API 在这个标签页里读进内存。没有任何请求带着它走,因为根本没有地方可以去:这个网站只是 CDN 上的静态文件,没有服务器代码可以接收东西。

  • File 与 Blob 承载字节,FileReader 与 arrayBuffer 负责读取
  • 拖放、选文件、粘贴,交出来的都是同一个对象
  • 只要有页面出现 fetch、上传、form action 或 API 路径,构建就会失败

解码在标签页里发生

相机和设计软件写出的格式,浏览器自己打不开,所以解码器随页面一起送到,就在旁边运行。

  • HEIC 与 HEIF:libheif 的 JavaScript 版本,由本站自己提供
  • PDF:PDF.js,其中部分图像编解码会用到 WebAssembly
  • SVG 描摹用 ImageTracer;读 QR 用 jsQR;写 PDF 用 pdf-lib
  • 每一个库都在构建时下载并由本域名提供,所以没有第三方 CDN 看得见你的访问

处理跑在 canvas,而且在 worker 里

缩放、压缩、转换都是 canvas 运算。它们在 Web Worker 内执行,所以大张照片不会让你眼前的页面卡住。

  • worker 里的 OffscreenCanvas 负责绘制与重新编码每一张图
  • convertToBlob 产生 JPG、PNG 或 WebP,质量由你决定
  • PNG 压缩用的是为本站自己写的 median cut 调色板,不是外来库
  • 文件的任何信息 —— 名称、大小、内容或由它们推导出来的东西 —— 一律不测量、不回报

结果也是在这里造出来的

你下载的东西,是在这个标签页组好的 Blob,再以 object URL 交给浏览器。它从来没有在别的地方存在过。

  • 一次一个文件,或在标签页里打包成 ZIP
  • 关掉标签页结果就消失;没有任何东西被存起来等你回来拿

自己验证

不要只信这一页。两个方法,都不用一分钟。

  • 打开 DevTools 的 Network 面板,然后转换一个文件。不会有任何带着你文件的请求离开。
  • 载入页面后把网络关掉,再用那个工具。它照样运作。
  • 看源代码:这里运行的每一样东西都是你可以直接打开来看的文件。

设备端与上传式工具并排比较

两种工具都存在,也都正当。分别在于你的文件去了哪里,而这个分别决定了你要相信什么。

在你的设备上上传到服务器
文件去哪里留在标签页内传去服务器
保留多久没有东西需要保留通常在设定的时限后删除
能否离线用页面载入后可以不可以
文件大小上限你设备的内存服务允许的上限
你要相信什么页面做了什么,而你看得到服务声称自己做了什么

每一个工具,同一套规矩

全部都是这样运作。这里没有付费版、没有账户,也没有会离开的文件。

图片PDF转换文字QR计算器时间日期色彩开发财务健康全部工具