jb2文件在web端展示之easyJBIG2show

news2024/12/30 1:45:55

easyJBIG2show

an easy JBIG2 file web show
github地址

一、背景

最近无意中接触到了一个二维码图片,该图片格式是jb2格式。翻阅资料发现JBIG标准最初在1993年发布,在当时被广泛应用于传真机和文档扫描仪等设备中。JBIG采用了一种自适应二进制编码算法,能够有效地压缩包含大量文本和线条等的二值图像。
随着技术的进步和需求的增加,JBIG2标准于2000年发布,对于从传真到高分辨率彩色扫描文档等各种类型的图像进行无损压缩提供了更好的性能和灵活性。JBIG2引入了更先进的编码技术,如上下文自适应算法和模板匹配,能够进一步减小文件大小,提高压缩率。
JBIG2标准的发布促使了许多设备和应用程序的支持。它被广泛用于电子归档、数字图书馆、OCR(光学字符识别)和文档管理等领域,以实现高效的文档扫描和存储。
总的来说,JBIG2作为一种专门针对二值图像的无损压缩技术,为高质量的文档图像处理提供了重要的工具和方法,并在数字化文档管理和传输中发挥了重要的作用。
由于web端的图片不能对jb2文件格式正确展示,由此想到需要转换。

二、前人经验

网络资源很少,这也是为什么在这里分享的原因。虽然很少,但还是找了些蛛丝马迹,指向了mozilla/pdf.js。
在这里我把需要使用的所有js都整合到eaysjbig2.js文件内主要包括了:
(1) “…/shared/util.js” 文件内的 shadow;
(2)“./core_utils.js” 文件内的log2, readInt8, readUint16, readUint32;
(3)“./arithmetic_decoder.js”;
(4)jbig2.js

三、使用方法

在index.html中,尝试打开一个jb2文件格式并把他展示到canvas上。

 <!DOCTYPE html>
<html>
<head>
    <title>打开本地文件</title>
    <script>
        function handleFileSelect(event) {
            var files = event.target.files; // 获取选择的文件数组
            var file = files[0]; // 获取第一个文件
            var reader = new FileReader();
            reader.onload = function (e) {
                var arrayBuffer = e.target.result;
                // 创建一个Uint8Array来存储文件内容
                var uintArray = new Uint8Array(arrayBuffer);
                var jbig2 = new Jbig2Image();
                var data = jbig2.parse(uintArray);
                var canvas = document.createElement('canvas');
                canvas.width = jbig2.width;
                canvas.height = jbig2.height;
                var ctx = canvas.getContext('2d');
                
                var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                var data1 = imageData.data;
                for (var i = 0,d=0; i < data1.length; i += 4,d++) {
                    let sdata = data[d]
                    if (sdata == 255) {
                        // 修改像素的颜色或透明度等
                        data1[i] = 255; // 红色通道(0-255)
                        data1[i + 1] = 255;   // 绿色通道(0-255)
                        data1[i + 2] = 255;   // 蓝色通道(0-255)
                    } else {  // 修改像素的颜色或透明度等
                        data1[i] = 0; // 红色通道(0-255)
                        data1[i + 1] = 0;   // 绿色通道(0-255)
                        data1[i + 2] = 0;   // 蓝色通道(0-255)
                    }
                    data1[i + 3] = 255; // Alpha 通道(0-255)
                }
                ctx.putImageData(imageData, 0, 0);
                document.body.appendChild(canvas);
            }
            reader.readAsArrayBuffer(file);
        }
    </script>
</head>
<body>
    <input type="file" onchange="handleFileSelect(event)">
</body>
<script src="jbig2.js"></script>
</html>

当然你可以把展示后的canvas存为web图片格式文件,利用image元素来进行展示,伪代码如下:


<script>
         ctx.putImageData(imageData, 0, 0);

         const dataURL = canvas.toDataURL("image/png");

         // 创建Image对象
         var img = new Image();

         // 为Image对象设置src为blob URL
         img.src =dataURL;
</script>

四、结果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.14~7.15学习总结

Java的前置知识学习时间截至了&#xff0c;慌的一批~~。 看看自己学的&#xff0c;再看看要求学的&#xff0c;简直&#xff1a; 现在继续&#xff1a;IO流里面的Commons_IO的用法&#xff1a; public class Main {public static void main(String[]args) throws IOException…

初识Linux——“Linux”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰开了一个全新的专栏啦&#xff0c;这就是Linux&#xff0c;下面&#xff0c;让我们一起进入Linux的世界吧&#xff01;&#xff01;&#xff01; Linux 背景介绍 搭建 Linux 环境 使用 XShell 远程登陆到 Linux Lin…

图片速览 DCN K-means-friendly Spaces: Simultaneous Deep Learning and Clustering

本文使用了一种交替更新网络参数和聚类中心的方法。在网络更新完成之后&#xff0c;对于固定的网络参数和 M&#xff0c;再更新当前样本的分配向量。然后根据新的分配结果如式子3.8更新聚类中心&#xff1a; 注&#xff1a;文中还有问题是否能进行凸优化的部分 CG https…

35 用户虚拟地址空间的 堆栈区间初始化

前言 对于用户程序来说, 堆栈区间 是一个很重要的组成部分, 这部分核心用于支持 函数调用, 参数暂存, 局部变量的存储 等等 我们这里 就来看一下 这块空间 的初始化的相关情况 这里会结合 内核进行调试, 以及 内存中的数据进行分析 堆栈空间的初始化 stack_base, stack_…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装mappings

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a;并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二)&#xff1a;Collective通信操作的封装mappings 【深度学习】【分布式训练】DeepSpeed&#xff1a;AllReduce与ZeRO-DP 【深度学习】…

day27 贪心算法

1.什么是贪心&#xff1f; 比如10张钞票&#xff0c;有1&#xff0c;5&#xff0c;20&#xff0c;100等面额&#xff0c;取五张&#xff0c;如何取得到数额最多的钱&#xff1f;每次取面额最大的那张钞票&#xff1b;就是每个阶段的局部最优&#xff1b;全局最优就是最后拿到的…

扫雷游戏制作

扫雷 0 目录 前言 游戏三部曲 游戏设计 函数说明 程序打包 1 前言 终极目标&#xff1a;打造多关卡扫雷游戏 制作环境: VS2015 支持:VC2010 VS各个版本 easyx图形库(点我) 一直想发表扫雷这种锻炼思维的游戏&#xff0c;其实扫雷弄个标题栏可以随意选择挑战…

从小白到大神之路之学习运维第60天--------Ansible自动化运维工具(安装、操作、简单使用,模块的作用)

第三阶段基础 时 间&#xff1a;2023年7月13日 参加人&#xff1a;全班人员 内 容&#xff1a; Ansible自动化运维工具 目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 &#xff08;一&#xff09;使用者 &#xff08;二&#xff09;Ansible工具集合 &…

Spring Cloud Alibaba 整合 Nacos 实战

Spring Cloud Alibaba 整合 Nacos 实战 一、Nacos的服务注册和发现机制1. Nacos 的服务注册和发现机制可以分为以下几个步骤&#xff1a;1.1. 服务注册&#xff1a;1.2. 服务发现&#xff1a;1.3. 心跳机制&#xff1a;1.4. 服务下线&#xff1a; 2. Nacos 的服务注册和发现机制…

【burpsuite安全练兵场-客户端15】基于DOM的漏洞-7个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

python接口自动化(三十八)-python操作mysql数据库(详解)

简介 现在的招聘要求对QA人员的要求越来越高&#xff0c;测试的一些基础知识就不必说了&#xff0c;来说测试知识以外的&#xff0c;会不会一门或者多门开发与语言&#xff0c;能不能读懂代码&#xff0c;会不会Linux&#xff0c;会不会搭建测试系统&#xff0c;会不会常用的数…

STL容器 -- vector的模拟实现(配详细注释)

目录 一、vector容器是什么&#xff1f;二、vector的模拟实现2.1 vector的成员变量2.2 构造函数2.2.1 无参构造函数2.2.2 有参构造函数 2.3 拷贝构造函数2.4 赋值重载函数2.5 析构函数2.6 reserve函数2.7 resize函数2.8 insert函数2.9 erase函数2.10 push_back和pop_back函数2.…

数据结构05:树与二叉树[C++][线索二叉树:先序、后序]

图源&#xff1a;文心一言 本篇博文含{先序线索化的代码与后序线索化的代码}&#xff0c;由于模板字数限制&#xff0c;中序线索化的代码及线索化的原理简介在上一篇博文~&#x1f95d;&#x1f95d; 数据结构05&#xff1a;树与二叉树[C][线索二叉树&#xff1a;中序]_梅头脑…

Linux 系统编程-开发环境(一)

目录 1 shell 1.1 shell 家族 1.2 bash 1.3 命令和路径补齐 1.4 历史记录 1.5 主键盘快捷键 1.6 演示 2 目录和文件 2.1 类Unix系统目录结构 2.2 用户目录 2.2.1 相对路径和绝对路径 2.3 ls 2.4 cd 2.5 which 2.6 pwd 2.7 mkdir 2.8 rmdir 2.9 touch 2.10…

在AndroidStudio中开发系统APP

1.AndroidStudio项目中调用系统API AndroidStudio项目中调用系统API&#xff08;比如调用 UnsupportedAppUsage 的方法&#xff09;&#xff0c;需要引入系统framework.jar包。 第一步如下图&#xff0c;fremework.jar 放在app/systemjar/目录下 第二步&#xff0c;在app下的…

Win10点击任务栏搜索、日历无响应

现象描述 点击Win10任务搜索栏和日历均无响应 解决方法 1、无响应应该是程序发生了异常&#xff0c;通过Windows日志产看器发现是KERNELBASE.dll模块发生了0x88985004异常。 2&#xff0c;查看错误代码含义 3&#xff0c;在微软社区查看此类问题&#xff0c;重点关注与字…

RocketMQ快速使用基础

1. RocketMQ 介绍 RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件&#xff0c;支持事务消息、顺序消息、批量消息、定时消息、消息回溯等 前身是MetaQ&#xff0c;是阿里研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目…

基于SaaS模式的Java基层卫生健康云HIS系统源码【运维管理+运营管理+综合监管】

云HIS综合管理平台 一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历…

【Kubernetes运维篇】RBAC之创建集群用户管理K8S

文章目录 一、创建zhangsan集群用户赋予uat名称空间管理员权限二、创建lisi集群用户赋予查看所有名称Pod权限 需求&#xff1a;公司新入职两位运维同事&#xff0c;分别是zhangsan、lisi&#xff0c;刚入职肯定不能给K8S管理员权限&#xff0c;所以需要创建两个系统账号&#x…

【电路原理学习笔记】第3章:欧姆定律:3.2 电流的计算

第3章&#xff1a;欧姆定律 3.2 电流的计算 电流相关欧姆定律公式&#xff1a; I V R I\frac{V}{R} IRV​ 【例3-3】图3-6所示电路中有多少安培的电流&#xff1f; 【解】 I V R 100 V 220 Ω 0.455 A I\frac{V}{R}\frac{100\rm V}{220\rm Ω}0.455\rm A IRV​220Ω100V…