我的编程空间,编程开发者的网络收藏夹
学习永远不晚

js实现多张图片打包成zip

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

js实现多张图片打包成zip

1、引入文件


<script class="lazy" data-src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script class="lazy" data-src="https://cdn.bootcdn.net/ajax/libs/jszip/3.6.0/jszip.min.js"></script>
<script class="lazy" data-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 imgsclass="lazy" data-src = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // /file/upload/202211/12/gppsj4y0v2r.jpg
    for (var i = 0; i < 1; i++) {
        imgsclass="lazy" data-src.push('/file/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 < imgsclass="lazy" data-src.length; i++) {
        var suffix = imgsclass="lazy" data-src[i].substring(imgsclass="lazy" data-src[i].lastIndexOf('.'))
        imageSuffix.push(suffix)

        getBase64(imgsclass="lazy" data-src[i]).then(
            function (base64) {
                console.log(base64)
                imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
                // 当所有图片转成base64执行图片压缩
                if (imgsclass="lazy" data-src.length == imgBase64.length) {
                    for (var i = 0; i < imgsclass="lazy" data-src.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.class="lazy" data-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 imgsclass="lazy" data-src = []

    // https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg
    // /file/upload/202211/12/gppsj4y0v2r.jpg
    for (var i = 0; i < 1; i++) {
        imgsclass="lazy" data-src.push('/file/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 < imgsclass="lazy" data-src.length; i++) {
        var suffix = imgsclass="lazy" data-src[i].substring(imgsclass="lazy" data-src[i].lastIndexOf('.'))
        imageSuffix.push(suffix)

        getBase64(imgsclass="lazy" data-src[i], function (base64) {
            imgBase64.push(base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, ""))
            if (imgsclass="lazy" data-src.length == imgBase64.length) {
                for (var i = 0; i < imgsclass="lazy" data-src.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 imgsclass="lazy" data-src = []

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

    handleBatchDownload(imgsclass="lazy" data-src)
}



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的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

js实现多张图片打包成zip

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

下载Word文档

猜你喜欢

详解python实现多张多格式图片转PDF并打包成exe

这篇文章主要为大家介绍了python实现多张多格式图片转PDF并打包成exe方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-05

Python如何实现多张图片合成一张马赛克图片

这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片素材4K高清原图开发环境Python 3.6Pycharm实现代码先导入所需模块
2023-06-22

web前端:js实现单张或多张图片持续无缝滚动

编程学习网:Javascript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
web前端:js实现单张或多张图片持续无缝滚动
2024-04-23

Python如何实现合并多张图片成视频

本篇内容介绍了“Python如何实现合并多张图片成视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合并多张图片到视频的方法说明除了使用 O
2023-07-05

Python如何实现多张图片合成文字的效果

本篇内容主要讲解“Python如何实现多张图片合成文字的效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现多张图片合成文字的效果”吧!一、图片批量下载首先我们需要从百度下载大
2023-07-02

基于Python实现合并多张图片转成mp4视频

随着现代科技飞速发展和人们提升视觉上体验,利用图片生成视频的方法,确实为工作或者提升生活体验感做了很多成功案例,本文就来介绍一下具体实现方法吧
2023-05-15

怎么用js点击按钮实现多张图片循环切换

本篇内容介绍了“怎么用js点击按钮实现多张图片循环切换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体内容如下代码:
2023-06-28

Python实现合并多张图片成视频的示例详解

随着短视频的兴起,越来越多的人开始用各种形式进行视频制作,本篇博客从程序员的角度为大家解析一下如何通过 Python 合并多个图片为一个视频,需要的可以参考一下
2023-02-01

C#实现合并多张图片为GIF动态图

这篇文章主要为大家详细介绍了C#如何将把一张又一张的图片去拼合成一张GIF动态图片,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2022-12-15

canvas怎么实现多张图片编辑的图片编辑器

这篇文章将为大家详细讲解有关canvas怎么实现多张图片编辑的图片编辑器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片编辑器产品需求先说需求,由于涉及到实际公司的项目开发,满足需求的图片编辑器可能只是
2023-06-09

编程热搜

目录