JSだけで複数のbase64データを画像化しZIPでダウンロード

FileSaver

こんにちは。

今回は、複数のbase64データを画像化して、ZIPで圧縮してダウンロードする機能を実装します。

まず使うライブラリは以下2つです。

  • JSZip
  • FileSaver
スポンサーリンク

JSzipを読み込む

公式サイト:https://stuk.github.io/jszip/

Installationに書いてある通りインストールします。
npm版も用意されているようです。
HTMLで読み込む場合は、Manuallyの所の「download JSZip」からダウンロードして読み込みましょう。ダウンロードしたフォルダのdist/jszip.min.jsを読み込めば使えます。

FileSaverを読み込む

FileSaverのGithub:https://github.com/eligrey/FileSaver.js/

HTML読み込みの場合はGithubからダウンロードして使いましょう。
dist/FileSaver.min.jsを読み込めば使えます。

その他の方法でインストールする場合は、Githubの一番下にInstallationをみてインストールしてください。

ダウンロード処理を実装

      var images = [];  // この配列にbase64のデータを入れる

      function downloadImages(images){
        let zip = new JsZip();
        for(var i=0; i < this.images.length; i++){
          zip.file('img'+[i]+'.png', images[i].split(',')[1], {base64: true});
        }
        zip.generateAsync({type: 'blob'})
        .then(function(content){
          FileSaver.saveAs(content, 'images.zip');
        });
      }

基本的な使い方は、

zip.file(画像ファイル名, base64データ, {base64: true})

の形式で記述します。

今回はデータが複数あるので配列にし、for文でループさせてデータの数だけ処理しています。
注意点として、base64データは、「,(コンマ)」より右側のデータのみを使用しないとエラーが起こります。
そのため、split()で分割し、右側のデータのみを格納しています。

タイトルとURLをコピーしました