GIFファイルを出力する「GIF.js」の使い方[公式]
JavaScriptでGIFファイルを出力する「GIF.js」の使い方です。
ブラウザがChromeの場合は、Chromeのセキュリティ仕様でローカルで実行するとエラーが発生します。回避策はサーバーにHTMLファイルをアップするか、エラー回避方法をご覧ください。
対応状況
GIF形式の全ての色数(2色、4色、8色、16色、32色、64色、128色、256色)に対応。その他に背景を透過する透明色の設定にも対応しています。
画像の色数が256色より多い場合は、付属するTMedianCutで256色以下に減色する事が可能です。
ダウンロード
GIF.js
ダウンロードの方法がわからない方はこちらからです。
使い方
サンプルコード
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="GIF.js"></script> <script> var src_img,dst_canvas,dst_ctx; window.onload = function () { src_img = document.getElementById("SrcImage"); dst_canvas = document.getElementById("DstCanvas"); dst_ctx = dst_canvas.getContext("2d"); } function save(){ // Generate ImageData // (ImageDataの生成) var imagedata = dst_ctx.getImageData(0,0,dst_canvas.width,dst_canvas.height); // Obtain color information of image // (画像のカラー情報の取得) var colors = getColorInfo(imagedata); // Reduce the color to 256 colors // when the number of colors of the image is larger than 256 colors // (画像の色数が256色より多い場合は256色に減色する) if(colors.length > 256){ var MedianCut = new TMedianCut(imagedata,colors); MedianCut.run(256,true); } // Output in GIF format // (GIF形式で出力する) var GIFWriter = new TGIFWriter(imagedata); GIFWriter.SaveToFile('untitle.gif'); } function OpenFile(event) { var files; var reader = new FileReader(); if(event.target.files){ files = event.target.files; }else{ files = event.dataTransfer.files; } reader.onload = function (event) { src_img.onload = function (){ dst_canvas.width = src_img.width; dst_canvas.height = src_img.height; dst_ctx.drawImage(src_img,0,0); }; src_img.onerror = function (){ alert('This file can not be read.'); run_flg = false; }; src_img.src = reader.result; }; if (files[0]){ reader.readAsDataURL(files[0]); document.getElementById("inputfile").value = ''; } } </script> </head> <body> <input type="file" id="inputfile" accept="image/jpeg,image/png,image/gif,image/bmp,image/x-icon" onchange="OpenFile(event);"> <button onclick="save();" style="font-size:24px;">Save</button> <p>[Original image]</p> <img id="SrcImage" style="display:none;"> <canvas id="DstCanvas"></canvas> </body> </html>
関数
画像のカラー情報を取得する | |
---|---|
関数 | function getColorInfo(imagedata) |
引数 | imagedata: ImageDataオブジェクト |
戻り値 | カラー情報のオブジェクト |
コンストラクタ
クラスを生成 | |
---|---|
コンストラクタ | new TGIFWriter(imagedata) |
引数 | imagedata : ImageDataオブジェクト |
戻り値 | TGIFWriterオブジェクト |
メソッド
GIFファイルの生成 | |
---|---|
メソッド | TGIFWriter.SaveToFile(FileName, r, g, b) |
引数 | FileName : 出力するファイル名 r : (省略可能)背景を透過する色(0 - 255) g : (省略可能)背景を透過する色(0 - 255) b : (省略可能)背景を透過する色(0 - 255) |
戻り値 | なし |
備考 | 背景色を透過する透明色は1色のみ指定可能です。 ※r/g/bで1つの色となります。 |
※TMedianCutは画像を高品質に減色する「MedianCut.js」の使い方をご覧ください。
応用
このまま関数を実行すると、JavaScriptはシングルスレッドですので重いです。そこで、HTML5の新機能であるWeb Workerを使用するとマルチスレッドで並列処理が可能です。
Web Workerの使い方はWeb Workerを使用してプログレスバーをマルチスレッドで動かすをご覧ください。
スポンサーリンク
関連記事
公開日:2016年12月15日
記事NO:02229