JavaScript原生实现图集分解并下载功能教程(三、使用JSZip压缩并下载分解好的碎图)

本文主要是介绍JavaScript原生实现图集分解并下载功能教程(三、使用JSZip压缩并下载分解好的碎图),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

-前言-

上一章我们使用了<a>标签的纯原生方法下载分解好的图集,虽然功能能够实现,不过下载下来的碎图不能在一个文件夹下,很蛋疼,因此本篇博客我们使用先压缩成zip的方式再下载下来。

如果没看过前两篇博客的同学也可以移步看看这个功能的具体实现:

https://blog.csdn.net/weixin_36719607/article/details/102623647

https://blog.csdn.net/weixin_36719607/article/details/102647690

完整项目地址:https://github.com/dengxuhui/ImagePackerWeb

如果想直接使用该功能的同学:http://dengxuhui.cn/

-正文-

在完成了所有图集上传分解功能后我们会得到有个imageDataAry的数组,数组成员为ImageData对象。我们本片博客就从这里开始写起。

引入JSZip.js及FileSaver.js

首先我们从网络上下载JSZip及FileSaver这两个js文件,并引入到index.html中

Github地址:https://github.com/Stuk/jszip

解析ImageData并保存到JSZip对象

/*** 通过jszip下载* @param {Array} imageDataAry */
downloadMethodByJSZip(imageDataAry) {var $this = this;var zip = new JSZip();for (var i = 0; i < imageDataAry.length; ++i) {$this.canvas.width = imageDataAry[i].width;$this.canvas.height = imageDataAry[i].height;$this.ctx.putImageData(imageDataAry[i], 0, 0);var base64 = $this.canvas.toDataURL("image/png", 1);base64 = base64.split(",")[1];zip.file($this.preFix + "_" + i + ".png", base64, { base64: true });}var blob = zip.generate({ type: "blob" });saveAs(blob, $this.preFix + ".zip");
}

上面我们还是首先获取单个碎图在Canvas中的数据并通过toDataURL获得base64数据。接着我们需要清洗返回的base64数据,把数据头中去掉,下面可以看看截取的原始base64数据

框内的字符串都是没有用的,我们只需要base64后的数据内容,因此使用字符串分割去得后面数据。

每个取得一个数据,我们就存到一个文件中,使用.file方法存储。

关于Base64数据我也有介绍:https://blog.csdn.net/weixin_36719607/article/details/102707249

生成blob并存储到本地

var blob = zip.generate({ type: "blob" });
saveAs(blob, $this.preFix + ".zip");

接下来我们生成blob并调用saveAs存储到本地。

官方提供的Demo是使用的一个异步方法来接收,不过我发现我下载中的JSZip中没有generateAsync这个方法,就直接使用了generate方法生成。

下面这个是官方demo实现方式

zip.generateAsync({type:"blob"})
.then(function(content) {    saveAs(content, $this.preFix + ".zip");
});

至此我们就实现了使用JSZip + FileSaver方法来下载我们分解好的图集碎图文件。

这篇关于JavaScript原生实现图集分解并下载功能教程(三、使用JSZip压缩并下载分解好的碎图)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353557

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel