news 2026/4/18 3:33:01

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/4/18 3:26:00

豆包手机被封杀,巨头们怕的到底是什么?

2025年12月&#xff0c;豆包手机的发布掀起了智能手机行业的一场 技术革命。凭借其独特的 AI智能助手 和强大的 硬件集成能力&#xff0c;豆包手机短短几天便引发了广泛关注。然而&#xff0c;随之而来的却是豆包手机遭遇了 微信 和 阿里系应用 的联合封杀。这场封杀背后&#…

作者头像 李华
网站建设 2026/4/18 3:38:29

变量不同步导致量子程序崩溃?你必须知道的4种解决方案

第一章&#xff1a;变量不同步导致量子程序崩溃&#xff1f;你必须知道的4种解决方案在量子计算编程中&#xff0c;变量状态的同步问题常常引发不可预知的程序崩溃。由于量子态的叠加与纠缠特性&#xff0c;传统经典编程中的变量管理策略不再适用&#xff0c;稍有不慎就会导致测…

作者头像 李华
网站建设 2026/4/17 4:47:13

远程开发效率翻倍秘诀:深度剖析VSCode调试端口映射机制

第一章&#xff1a;远程开发效率翻倍的基石&#xff1a;VSCode调试端口映射全景透视在现代分布式开发环境中&#xff0c;远程开发已成为提升协作效率与资源利用率的关键实践。VSCode 通过其强大的 Remote - SSH、Remote - Containers 和 Port Forwarding 功能&#xff0c;实现了…

作者头像 李华
网站建设 2026/4/18 2:01:29

手把手教你打造专属量子IDE:VSCode插件集成终极指南

第一章&#xff1a;量子计算与VSCode集成概述 量子计算作为下一代计算范式的前沿领域&#xff0c;正在逐步从理论研究走向工程实践。随着云量子计算平台的成熟&#xff0c;开发者不再需要直接操作物理量子设备&#xff0c;而是可以通过高级编程接口在经典计算机上编写、模拟和提…

作者头像 李华
网站建设 2026/4/18 3:33:41

【Qiskit开发者必备工具箱】:深度解析VSCode调试配置与断点技巧

第一章&#xff1a;VSCode Qiskit 调试工具概览Visual Studio Code&#xff08;VSCode&#xff09;作为现代量子计算开发的主流编辑器&#xff0c;结合Qiskit框架为开发者提供了高效的调试支持。通过集成Python调试器与Qiskit SDK&#xff0c;用户可以在编写量子电路时实现断点…

作者头像 李华
网站建设 2026/4/18 8:40:05

GoCV跨平台UI开发实战:3种方案打造专业视觉应用界面

GoCV跨平台UI开发实战&#xff1a;3种方案打造专业视觉应用界面 【免费下载链接】gocv hybridgroup/gocv: 是一个基于 Go 语言的开源计算机视觉库&#xff0c;支持多种计算机视觉算法和工具。该项目提供了一个简单易用的计算机视觉库&#xff0c;可以方便地实现图像和视频处理算…

作者头像 李华