news 2026/8/8 7:30:33

vue2将png格式图片转为bmp格式并导入喷码枪中使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue2将png格式图片转为bmp格式并导入喷码枪中使用

vue2将png格式图片转为bmp格式并导入喷码枪中使用

技术要点
1.格式转换: 将PNG格式转换为BMP格式,提高与喷码枪的兼容性
2.二进制处理: 使用DataView和ArrayBuffer直接操作二进制数据构建BMP文件
3.内存管理: 正确释放创建的对象URL避免内存泄漏
4.错误处理: 包含完整的错误处理机制
这样的实现能够生成标准的BMP格式文件,解决了喷码枪无法识别文件的问题。

// 导出操作 - 修改为下载BMP格式图片handleExportPrint(){letbarcodeParams={bussinessId:this.parentData.proWorkorderDetailId,bussinessCode:this.parentData.prodSeriaNo,barcodeType:"PSN2D",};getBarcodeUrl(barcodeParams).then((response)=>{if(response.data!=null){constbarcodeUrl=response.data.barcodeUrl;constbarcodeContent=response.data.barcodeContent;// 获取条码内容用于文件命名if(barcodeUrl){// 使用修改后的函数this.pngToBmpCanvas(barcodeUrl,barcodeContent);}else{this.$message.error("暂没有生成条喷码");}}});},/** * 使用Canvas将PNG转换为BMP格式并触发下载 * @param {string} pngUrl - PNG图片URL * @param {string} filename - 文件名 */pngToBmpCanvas(pngUrl,filename){constimg=newImage();img.crossOrigin="anonymous";img.src=pngUrl;img.onload=()=>{constcanvas=document.createElement("canvas");constctx=canvas.getContext("2d");canvas.width=img.width;canvas.height=img.height;// 绘制图像到canvasctx.drawImage(img,0,0);// 获取图像数据constimageData=ctx.getImageData(0,0,canvas.width,canvas.height);// 创建BMP数据constbmpData=this.createBMPData(imageData,false);constblob=newBlob([bmpData],{type:"image/bmp"});// 创建下载链接并触发下载consturl=window.URL.createObjectURL(blob);constlink=document.createElement("a");link.href=url;link.download=`${filename||"barcode"}.bmp`;// 触发下载document.body.appendChild(link);link.click();// 清理document.body.removeChild(link);window.URL.revokeObjectURL(url);};img.onerror=(error)=>{console.error("图片加载失败:",error);this.$message.error("图片加载失败");};},/** * 创建BMP文件数据 * @param {ImageData} imageData - Canvas图像数据 * @param {boolean} withAlpha - 是否包含Alpha通道 * @returns {ArrayBuffer} BMP文件数据 */createBMPData(imageData,withAlpha=false){constwidth=imageData.width;constheight=imageData.height;constdata=imageData.data;// 计算每行字节数(必须是4的倍数)constbytesPerPixel=withAlpha?4:3;constrowSize=Math.ceil((width*bytesPerPixel)/4)*4;constpixelArraySize=rowSize*height;// BMP文件头(14字节)constfileHeaderSize=14;constinfoHeaderSize=40;constfileSize=fileHeaderSize+infoHeaderSize+pixelArraySize;constbuffer=newArrayBuffer(fileSize);constview=newDataView(buffer);letoffset=0;// 文件头view.setUint8(offset++,0x42);// 'B'view.setUint8(offset++,0x4d);// 'M'view.setUint32(offset,fileSize,true);offset+=4;// 文件大小view.setUint32(offset,0,true);offset+=4;// 保留字段view.setUint32(offset,fileHeaderSize+infoHeaderSize,true);offset+=4;// 像素数据偏移// 信息头view.setUint32(offset,infoHeaderSize,true);offset+=4;// 信息头大小view.setInt32(offset,width,true);offset+=4;// 宽度view.setInt32(offset,height,true);offset+=4;// 高度view.setUint16(offset,1,true);offset+=2;// 颜色平面数view.setUint16(offset,withAlpha?32:24,true);offset+=2;// 每像素位数view.setUint32(offset,0,true);offset+=4;// 压缩方式(0=不压缩)view.setUint32(offset,pixelArraySize,true);offset+=4;// 图像数据大小view.setInt32(offset,2835,true);offset+=4;// 水平分辨率(像素/米)view.setInt32(offset,2835,true);offset+=4;// 垂直分辨率view.setUint32(offset,0,true);offset+=4;// 使用的颜色数view.setUint32(offset,0,true);offset+=4;// 重要颜色数// 像素数据(BMP是从下到上存储)for(lety=height-1;y>=0;y--){for(letx=0;x<width;x++){constindex=(y*width+x)*4;constr=data[index];constg=data[index+1];constb=data[index+2];consta=data[index+3];if(withAlpha){// BGRA格式(带Alpha)view.setUint8(offset++,b);view.setUint8(offset++,g);view.setUint8(offset++,r);view.setUint8(offset++,a);}else{// BGR格式(无Alpha)view.setUint8(offset++,b);view.setUint8(offset++,g);view.setUint8(offset++,r);}}// 行对齐填充constpadding=rowSize-width*bytesPerPixel;for(leti=0;i<padding;i++){view.setUint8(offset++,0);}}returnbuffer;},
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 11:02:03

为什么你的边缘Agent总连不上网络?深度剖析Docker网络配置盲区

第一章&#xff1a;为什么你的边缘Agent总连不上网络&#xff1f;深度剖析Docker网络配置盲区在部署边缘计算场景中的Agent服务时&#xff0c;Docker容器网络配置是决定其能否正常通信的核心环节。许多开发者遭遇Agent启动后无法连接到中心服务器或局域网设备的问题&#xff0c…

作者头像 李华
网站建设 2026/8/7 22:07:34

Muon优化器与FP8混合精度:AI训练能效革命与绿色计算新范式

Muon优化器与FP8混合精度&#xff1a;AI训练能效革命与绿色计算新范式 【免费下载链接】modded-nanogpt GPT-2 (124M) quality in 5B tokens 项目地址: https://gitcode.com/GitHub_Trending/mo/modded-nanogpt 在大规模AI模型训练成本呈指数级增长的今天&#xff0c;模…

作者头像 李华
网站建设 2026/8/7 23:02:59

没有实验数据如何发SCI论文——AI与VOSviewer, CiteSpace, R包联合使用的可视化分析与全流程技术方法

文献计量学是一门融合数学、统计学与信息科学的交叉学科&#xff0c;旨在通过定量方法系统分析学术文献中的知识结构、研究热点与发展趋势。在科研竞争日益激烈的今天&#xff0c;将AI 大语言模型与文献计量学方法结合&#xff0c;已成为提升科研效率、精准选题和把握学科前沿的…

作者头像 李华
网站建设 2026/8/7 1:51:10

3、Kali Linux 入门指南

Kali Linux 入门指南 1. 启动 Kali 并登录 启动 Kali 后,会出现登录界面。使用 root 账户登录,用户名是 root ,默认密码是 toor 。登录成功后,即可访问 Kali 桌面。 2. 终端与文件系统基础 2.1 打开终端 使用 Kali 的第一步是打开终端,它是命令行界面。在 Kali L…

作者头像 李华
网站建设 2026/8/7 23:02:27

4、Linux 文件与目录操作及文本处理全解析

Linux 文件与目录操作及文本处理全解析 1. 文件与目录的基本操作 1.1 创建文件 在 Linux 中创建文件有多种方法,这里介绍两种简单的方式: - 使用 cat 命令 : cat 原本用于显示文件内容,但也能创建小文件。使用重定向符号 > 可创建新文件,示例如下: kali &…

作者头像 李华
网站建设 2026/8/7 7:54:47

免费开源敏捷项目管理终极指南:Taiga从入门到精通

免费开源敏捷项目管理终极指南&#xff1a;Taiga从入门到精通 【免费下载链接】taiga Taiga is a free and open-source project management for cross-functional agile teams. 项目地址: https://gitcode.com/gh_mirrors/taig/taiga Taiga是一款功能强大的免费开源项目…

作者头像 李华