扫描文档的尺寸优化

将文档扫描成数字化的电子文件可以帮助公司节省物理空间、降低成本、促进协作、优化数据检索等等。

有时,我们可能会遇到非常大的或者图像质量较低的扫描文件。在本文中,我们将讨论如何优化扫描文档的尺寸。

Dynamic Web TWAIN编写了相关的示例,它是一个允许从浏览器扫描文档的JavaScript库。

如何计算图像大小

在开始之前,让我们了解一下如何计算图像大小。

复制代码
图像字节数 = 像素高度 * 像素宽度 * 位深度 / 8

它受到像素数量和它能代表多少颜色影响。

DPI

DPI代表每英寸点数,是衡量扫描文档或照片分辨率的指标。DPI越高,扫描和生成的图像的质量和分辨率就越高。

通常,以大约300DPI扫描文档会产生具有合理大小和良好质量的图像。

在Dynamic Web TWAIN中,我们可以在device configuration中指定DPI:

js 复制代码
DWObject.AcquireImageAsync({IfShowUI:false,Resolution:300});

以下是使用不同DPI扫描文档的测试结果。

DPI 分辨率 文件大小
100 850x1100 2741.41KB
200 1700x2200 10957.03KB
300 2550x3300 24659.77KB
600 5100x6600 98613.28KB

位深度

位深度,也称为颜色深度,是用于表示单个像素颜色的位数。位深度越大,像素可以表示的颜色就越多。

大多数文档扫描仪都提供了以不同颜色模式扫描文档的选项:黑白、灰色和彩色。

它们的位深度如下:

  • 黑白:1位。
  • 灰色:8位。
  • 彩色:24位。

在Dynamic Web TWAIN中,我们可以在device configuration中指定颜色模式(或称像素类型):

js 复制代码
let pixelType = Dynamsoft.DWT.EnumDWT_PixelType.TWPT_BW;
DWObject.AcquireImageAsync({IfShowUI:false,PixelType:pixelType});

我们还可以使用以下代码手动设置位深度:

js 复制代码
let imageIndex = 0;
let bitDepth = 4;
let highQuality = false;
DWObject.ChangeBitDepth(imageIndex,bitDepth,highQuality);

以下是用不同颜色模式扫描文档的测试结果。

像素类型 分辨率 位深度 文件大小
黑白 2550x3507 1 1095.94KB
灰色 2550x3507 8 8740.10KB
彩色 2550x3507 24 26206.61KB

图像压缩

我们可以用JPEG和PNG等不同的图像文件格式压缩图像数据。

在Dynamic Web TWAIN中,我们可以使用以下代码获取图像大小:

js 复制代码
let imageIndex = 0;
let width = DWObject.GetImageWidth(imageIndex);
let height = DWObject.GetImageHeight(imageIndex);
let originalSize = DWObject.GetImageSize(imageIndex,width,height);
let size = DWObject.GetImageSizeWithSpecifiedType(imageIndex,j); //size after compression with a format

以下是扫描不同颜色模式和图像格式的文档的测试结果。

像素类型 分辨率 位深度 文件大小 文件格式 压缩率
黑白 2550x3507 1 1096.00KB BMP 0%
黑白 2550x3507 1 705.89KB JPG 35.59%
黑白 2550x3507 1 38.09KB TIF 96.52%
黑白 2550x3507 1 77.45KB PNG 92.93%
灰色 2550x3507 8 8741.15KB BMP 0%
灰色 2550x3507 8 590.68KB JPG 93.24%
灰色 2550x3507 8 1957.32KB TIF 77.61%
灰色 2550x3507 8 1574.74KB PNG 81.98%
彩色 2550x3507 24 26206.66KB BMP 0%
彩色 2550x3507 24 665.43KB JPG 97.46%
彩色 2550x3507 24 5112.49KB TIF 80.49%
彩色 2550x3507 24 3753.82KB PNG 85.68%

我们可以从表中总结出下面两点:

  1. BMP是一种无损格式,不压缩图像。
  2. JPEG不能很好地处理黑白图像,但它对灰色和彩色图像的压缩率最好。

多页优化

大多数时候,我们需要扫描多页文档。我们可以使用TIFF或PDF作为容器将图像保存在一个文件中。TIFF和PDF支持多种图像格式和压缩方法。

由于不同的压缩方法对不同的颜色模式的效果不同,Dynamic Web TWAIN使用以下压缩策略来获得最佳结果。

对于TIFF,它使用以下策略:

  • 对于1位图像,使用TIFF_T6压缩算法。
  • 对于其他图像,使用TIFF_LZW压缩算法。

对于PDF,它使用以下策略:

  • 对于1位图像,如果PDF版本超过1.4,使用JBIG2,否则使用FAX4(CCITT Group 4 Fax)。
  • 对于8位图像,如果图像为灰度,则使用JPEG,否则使用LZW(Lempel-Ziv-Welch)。
  • 对于24位和32位图像,使用JPEG。

以下是扫描TIFF和PDF格式文档的测试结果。该测试用黑白、灰色和彩色模式扫描了同一文档。

文件格式 原始大小 文件大小 压缩率 链接
TIFF 36042.64KB 7109.21KB 80.28% 下载
PDF 36042.64KB 1283.96KB 96.44% 下载

源代码

可以在以下仓库中找到所有代码和在线演示:

github.com/tony-xlh/sc...

相关推荐
知识分享小能手13 分钟前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
姑苏洛言31 分钟前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端
hackchen1 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
你的人类朋友2 小时前
🤔什么时候用BFF架构?
前端·javascript·后端
知识分享小能手2 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
我命由我123453 小时前
前端开发问题:SyntaxError: “undefined“ is not valid JSON
开发语言·前端·javascript·vue.js·json·ecmascript·js
Jokerator3 小时前
深入解析JavaScript获取元素宽度的多种方式
javascript·css
海天胜景3 小时前
vue3 当前页面方法暴露
前端·javascript·vue.js
GISer_Jing4 小时前
前端面试常考题目详解
前端·javascript
中微子5 小时前
JavaScript 防抖与节流:从原理到实践的完整指南
前端·javascript