iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js实现多张图片打包成zip
  • 642
分享到

js实现多张图片打包成zip

2024-04-02 19:04:59 642人浏览 薄情痞子
摘要

目录1、引入文件2、html页面3、主要代码4、优化图片转base64的流程,提高zip的打包速度5、再优化,通过axiOS把图片转成base641、引入文件 <scrip

1、引入文件


<script src="https://cdn.bootcdn.net/ajax/libs/Jquery/3.6.0/jquery.min.js"></script>
<script src="Https://cdn.bootcdn.net/ajax/libs/jszip/3.6.0/jszip.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>

2、html页面


<button onclick="packageImages()">下载zip</button><span id="status"></span>

3、主要代码


function packageImages() {
    $('#status').text('处理中。。。。。')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // /file/imgs/upload/202211/12/gppsj4y0v2r.jpg
    for (var i = 0; i < 1; i++) {
        imgsSrc.push('/file/imgs/upload/202211/12/dmotckw3u34.jpg_240x240.jpg')
    }
    var imgBase64 = [] //base64图片
    var imageSuffix = [] //图片后缀
    var zip = new JSZip()
    zip.file('readme.txt', '案件详情资料\n')
    var img = zip.folder('images')

    for (var i = 0; i < imgsSrc.length; i++) {
        var suffix = imgsSrc[i].substring(imgsSrc[i].lastIndexOf('.'))
        imageSuffix.push(suffix)

        getBase64(imgsSrc[i]).then(
            function (base64) {
                console.log(base64)
                imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
                // 当所有图片转成base64执行图片压缩
                if (imgsSrc.length == imgBase64.length) {
                    for (var i = 0; i < imgsSrc.length; i++) {
                        // 文件名  数据
                        img.file(i + imageSuffix[i], imgBase64[i], {
                            base64: true,
                        })
                    }
                    zip.generateAsync({
                        type: 'blob'
                    }).then(function (content) {
                        console.log(1)
                        // see FileSaver.js
                        saveAs(content, 'images.zip')
                        $('#status').text('处理完成。。。。。')
                    })
                }
            },
            function (err) {
                console.log(err) //打印异常信息
            }
        )
    }
}

//传入图片路径,返回base64
function getBase64(img) {
    function getBase64Image(img, width, height) {
        //width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
        var canvas = document.createElement('canvas')
        canvas.width = width ? width : img.width
        canvas.height = height ? height : img.height

        var ctx = canvas.getContext('2d')
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
        var dataURL = canvas.toDataURL()
        return dataURL
    }
    var image = new Image()
    image.crossOrigin = 'Anonymous'
    image.src = img
    var deferred = $.Deferred()
    if (img) {
        image.onload = function () {
            deferred.resolve(getBase64Image(image)) //将base64传给done上传处理
        }
        return deferred.promise() //问题要让onload完成后再return sessionStorage['imgTest']
    }
}

4、优化图片转base64的流程,提高zip的打包速度


function packageImages() {
    $('#status').text('处理中。。。。。')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // /file/imgs/upload/202211/12/gppsj4y0v2r.jpg
    for (var i = 0; i < 1; i++) {
        imgsSrc.push('/file/imgs/upload/202211/12/n053ecrlsmz.jpg')
    }
    var imgBase64 = [] //base64图片
    var imageSuffix = [] //图片后缀
    var zip = new JSZip()
    zip.file('readme.txt', '案件详情资料\n')
    var img = zip.folder('images')

    for (var i = 0; i < imgsSrc.length; i++) {
        var suffix = imgsSrc[i].substring(imgsSrc[i].lastIndexOf('.'))
        imageSuffix.push(suffix)

        getBase64(imgsSrc[i], function (base64) {
            imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
            if (imgsSrc.length == imgBase64.length) {
                for (var i = 0; i < imgsSrc.length; i++) {
                    // 文件名  数据
                    img.file(i + imageSuffix[i], imgBase64[i], {
                        base64: true,
                    })
                }
                zip.generateAsync({
                    type: 'blob'
                }).then(function (content) {
                    console.log(1)
                    // see FileSaver.js
                    saveAs(content, 'images.zip')
                    $('#status').text('处理完成。。。。。')
                })
            }
        })
    }
}
function getBase64(img, callback) {
    fetch(img).then(
        res => res.blob())
        .then(res => {
            let fr = new FileReader();//https://developer.mozilla.org/zh-CN/docs/WEB/api/FileReader
            fr.onload = function (e) {
                callback(e.target.result)
            };
            fr.onerror = function () {
                console.log('读取错误!')
            };
            fr.readAsDataURL(res);//如果是转文字,第二个参数可以使用编码
        })
}

5、再优化,通过axios把图片转成base64


function packageImages() {
    $('#status').text('处理中。。。。。')

    var imgsSrc = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // /file/imgs/upload/202211/12/gppsj4y0v2r.jpg
    for (var i = 0; i < 100; i++) {
        imgsSrc.push('/file/imgs/upload/202211/12/n053ecrlsmz.jpg')
    }

    handleBatchDownload(imgsSrc)
}



getFile = (url) => {
    return new Promise((resolve, reject) => {
        axios({
            method: 'get',
            url,
            responseType: 'arraybuffer'
        }).then(data => {
            resolve(data.data)
        }).catch(error => {
            reject(error.toString())
        })
    })
};

// 批量下载
handleBatchDownload = async (selectImgList) => {
    const data = selectImgList;
    const zip = new JSZip()
    const promises = []
    await data.forEach((item, idx) => {
        // console.log(item, idx)
        const promise = this.getFile(item).then(async (data) => { // 下载文件, 并存成ArrayBuffer对象
            const arr_name = item.split("/");
            let file_name = arr_name[arr_name.length - 1] // 获取文件名
            // if (file_name.indexOf('.png') == -1) {
            //    file_name = file_name + '.png'
            // }
            await zip.file(idx + '.png', data, {
                binary: true
            }) // 逐个添加文件
        })
        promises.push(promise)
    })
    Promise.all(promises).then(() => {
        zip.generateAsync({
            type: "blob"
        }).then(content => { // 生成二进制流
            saveAs(content, "photo.zip") // 利用file-saver保存文件
            $('#status').text('处理完成。。。。。')
        })
    })

};

以上就是js实现多张图片打包成zip的详细内容,更多关于js 图片打包成zip的资料请关注编程网其它相关文章!

--结束END--

本文标题: js实现多张图片打包成zip

本文链接: https://www.lsjlt.com/news/127047.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js实现多张图片打包成zip
    目录1、引入文件2、html页面3、主要代码4、优化图片转base64的流程,提高zip的打包速度5、再优化,通过axios把图片转成base641、引入文件 <scrip...
    99+
    2024-04-02
  • 详解python实现多张多格式图片转PDF并打包成exe
    目录转PDF初始代码转PDF最终代码GUI界面设计代码打包成可执行文件完整代码附录转PDF初始代码 从文件夹中读取图片数据,然后将他们保存为PDF格式。 不长,大概10行代码。 f...
    99+
    2023-01-05
    python图片格式转PDF打包exe python图片转PDF
  • Python实现多张图片合成一张马赛克图片
    目录前言开发环境实现代码先导入所需模块读取图片文件读取所有源图片并计算对应颜色平均值合法图像列表平均颜色列表遍历主函数模块调用执行完整效果前言 最近有网友私信我,问如何把多张图片合成...
    99+
    2024-04-02
  • js使用Canvas将多张图片合并成一张的实现代码
    解决方案 function mergeImgs(list) { const imgDom = document.createElement('img') document.b...
    99+
    2024-04-02
  • Python如何实现多张图片合成一张马赛克图片
    这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片素材4K高清原图开发环境Python 3.6Pycharm实现代码先导入所需模块...
    99+
    2023-06-22
  • Android实现多张图片合成加载动画
    本文实例为大家分享了Android实现多张图片合成加载动画的具体代码,供大家参考,具体内容如下 1、自定义ProgressDialog public class MyProgress...
    99+
    2024-04-02
  • Python实现合成多张图片到PDF格式
    目录1.准备2.合成原理3.多张照片合成PDF在日常生活中,经常会遇到需要提交身份证正反面证明资料的情况,而且这些网站大部分只接受pdf格式,这时候我们就需要把身份证正反面两张图片合...
    99+
    2024-04-02
  • js点击按钮实现多张图片循环切换
    本文实例为大家分享了js点击按钮实现多张图片循环切换的具体代码,供大家参考,具体内容如下 代码: <!DOCTYPE html> <html lang="ch"&g...
    99+
    2024-04-02
  • Python如何实现合并多张图片成视频
    本篇内容介绍了“Python如何实现合并多张图片成视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合并多张图片到视频的方法说明除了使用 O...
    99+
    2023-07-05
  • Python实现多张图片合成文字的效果
    目录前言一、图片批量下载1.下载图片2.检测图片数量3.查找相似图片二、图片马赛克1.使用photomosaic库实现图片马赛克2.计算颜色相似度实现图片马赛克前言 前段时间看到有人...
    99+
    2024-04-02
  • JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片
    JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片 ---------------------------------------------效果-----------------...
    99+
    2023-09-13
    java excel 开发语言
  • Python如何实现多张图片合成文字的效果
    本篇内容主要讲解“Python如何实现多张图片合成文字的效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现多张图片合成文字的效果”吧!一、图片批量下载首先我们需要从百度下载大...
    99+
    2023-07-02
  • 基于Python实现合并多张图片转成mp4视频
    目录前言一、需要调入的模块1、imageio模块2、Image 模块二、实现合并多张图片转成 mp4 视频三、优化改进一下总结前言 随着现代科技飞速发展和人们提升视觉上体验,利用图片...
    99+
    2023-05-15
    Python合并图片转成视频 Python合并图片 Python 图片转视频
  • win10怎么设置一张主题包含多张图片
    这篇文章主要讲解了“win10怎么设置一张主题包含多张图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10怎么设置一张主题包含多张图片”吧!win10设置一张主题包含多张图片的方法第...
    99+
    2023-07-01
  • Python如何合并多张图片成PDF
    小编给大家分享一下Python如何合并多张图片成PDF,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!过程拿到一个需求最重要的就是将大块任务拆分成一个个小模块,逐个...
    99+
    2023-06-15
  • Vant Uploader实现上传一张或多张图片组件
    本文实例为大家分享了Vant Uploader实现上传一张或多张图片组件,供大家参考,具体内容如下 html部分 <template> <div class...
    99+
    2024-04-02
  • 怎么用js点击按钮实现多张图片循环切换
    本篇内容介绍了“怎么用js点击按钮实现多张图片循环切换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体内容如下代码:<!DOCTYP...
    99+
    2023-06-28
  • C#实现合并多张图片为GIF动态图
    目录文章描述开发环境开发工具实现代码实现效果代码解析文章描述 在前一篇写了如何将一张GIF动态图分解成一帧一帧的图片,这一篇我们就把喝进去的一瓢水给还回去。即把一张又一张的图片去拼合...
    99+
    2022-12-15
    C#合并图片为gif C#合并图片 C# gif
  • Python实现合并多张图片成视频的示例详解
    目录合并多张图片到视频的方法说明moviepy 将多张图片合成视频导入所需模块创建 ImageSequenceClip 对象保存视频moviepy 合成多张图片更多配置名词解释FFm...
    99+
    2023-02-01
    Python合并图片成视频 Python合并图片 Python 图片 视频
  • PyQt5实现多张图片显示并滚动
    最近要做个网页图片批量下载工具,然后需要一个页面显示网页上的所有图片供用户勾选,再根据勾选的内容来下载指定图片,其中就涉及到要到同时显示多张图片。 单页面显示多张图片 习惯性的用Gr...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作