Screenshot PDF
返回博客

长截图的 Canvas 内存预算:为什么不同设备上限不同

发布于: 2026-08-08审核于: 2026-08-08Screenshot PDF 编辑团队
长截图的 Canvas 内存预算:为什么不同设备上限不同

1,000 × 20,000 的屏幕截图包含 2000 万像素。在未压缩的 RGBA Canvas 中,在计算临时画布、解码的源图像、撤消快照、PDF 数据和浏览器开销之前,仅原始像素缓冲区就大约有 8000 万字节。因此,磁盘上的文件大小是编辑内存的一个糟糕的估计。

屏幕截图 PDF 版本 0.0.13 使用设备感知像素和历史预算来减少内存较低的系统上的崩溃,同时在功能更强的设备上保留更多细节和撤消容量。本文解释了这些当前值以及用户可以应用于任何基于浏览器的图像工作流程的推理。

驱动 Canvas 成本的是像素,而不是压缩的兆字节

PNG 和 JPEG 压缩重复或可预测的视觉信息。 4 MB PNG 在解码后可以扩展到更大的像素缓冲区。屏幕截图的第一个计算是:

pixel area = width × height

粗略的缓冲区下限估计是:

RGBA bytes = width × height × 4

在 3200 万像素时,一个原始缓冲区约为 128 MB。浏览器操作可以同时暂时保存解码的图像、目标画布、裁剪的画布、预览和撤消状态。实际内存使用取决于实现和浏览器,因此该公式是规划指导而不是承诺。

Screenshot PDF 当前采用的像素预算

编辑器会读取浏览器的 navigator.deviceMemory 提示(如果可用),否则假定保守的中间值。其画布像素限制为:

|报告的设备内存 |画布像素预算| | --- | ---: | | 2 GB 或更少 | 20,000,000 | |高达 4 GB | 32,000,000 | 32,000,000 |高达 8 GB | 48,000,000 | |超过 8 GB | 64,000,000 | 64,000,000

浏览器值是粗略的并且不普遍可用。它不应被解释为对可用 RAM 的精确测量。预算是一个护栏,而不是基准分数。

适用于低、中和高内存设备的自适应 Canvas 预算。

超大图像如何缩放

当上传的图像超出选定的像素预算时,编辑器将使用允许面积比的平方根计算比例:

scale = √(pixel budget ÷ source pixel area)

宽度和高度都乘以该比例。这样可以保留纵横比,同时减少预算的总面积。例如,将两个尺寸减半会将像素面积减少到四分之一。

缩放可以防止单个图像分配无界的画布,但它也会减少源细节。小界面文本和细线应在 PDF 预览中进行 100% 检查。如果它们变得难以阅读,请将源代码分成更窄或更短的部分,而不是反复提高压缩质量。

注释历史有其自身的成本

撤消快照可以复制大画布。因此,屏幕截图 PDF 会适应历史深度:

  • 非常大的画布或报告 2 GB 的设备保留两个快照;
  • 超过 1200 万像素的画布或高达 4 GB 的设备保留三个;
  • 典型的中档案例保留四个;
  • 报告至少 8 GB 的设备最多可以保留 6 个。

当快照被逐出时,较旧的对象 URL 将被撤销。这会限制保留的浏览器资源而不更改当前文档。用户仍应导出或保存重要工作,而不是将撤消历史记录视为持久存储。

尺寸可能会先于总面积而失效

除了总像素面积之外,浏览器和图形后端可能还会施加最大画布宽度或高度。屏幕截图 PDF 的拼接路径在区域预算之前应用单独的最大尺寸。即使总面积看起来合理,极窄和极高的图像也可能会达到尺寸边界。

浏览器版本、GPU 配置、操作系统和可用内存都会影响实际行为。 MDN 的 Canvas 教程 描述了 API,但并未为每种环境提供一个通用的安全最大值。

内存压力的症状

  • 图像解码但预览仍为空白;
  • 画布创建返回不可用的上下文;
  • 浏览器选项卡重新加载或变得无响应;
  • 由于快照很大,注释变得很慢;
  • PDF 生成失败,但原始图像仍显示;
  • 浏览器报告内存不足或分配错误。

这些症状不会自动表明文件已损坏。使用较小的副本进行复制,关闭不相关的繁重选项卡,并记录源尺寸和设备上下文。

处理很长材料的更安全方法

  1. 捕获具有可见重叠的命名部分。
  2. 缩小视口,排除不相关的侧边栏,但确保文本保持可读。
  3. 在保留结构或元数据时,使用源服务的官方导出。
  4. 避免在最大尺寸的Canvas上进行不必要的重复编辑。
  5. 保留原始图像,直至 PDF 通过检查。
  6. 在删除任何中间文件之前,在第二个查看器中打开导出的 PDF。

对于收据、研究或支持证据,分段文件可能比一张巨大的图像更清晰。使用确定性名称,例如 part-01part-02,并记录重叠或截面边界。

可重复的容量报告

报告问题时,请包括源宽度和高度、压缩文件大小、浏览器和扩展版本、报告的设备内存层(如果可用)、尝试的操作以及重现故障的最小尺寸。当合成图像可以表现出相同的分配行为时,请勿附加私人屏幕截图。

自适应限制并不声称层中的每个设备都具有相同的行为。它们是细节、稳定性和撤消能力之间的明确权衡。了解像素数学可以帮助用户在浏览器达到不可恢复的限制之前选择更小、更清晰的捕获。