解説
ファイルフォーマットは、コンピュータ上でデータを保存する際の規約のことです。保存したデータをまた読み込み直せるように、ファイルの保存形式には、ファイルの種類ごとに、ルールが設けられています。
一般的に広まっており、複数のソフトで読み書きできるファイル形式では、このファイルフォーマットが公開されていることが多いです。そういった際は、自分で仕様を読んで、ソフトを作ることもできます。
画像や音声、動画といったファイルでは、データの内部が圧縮されていて、そのまま見ても意味が分からないことが多いです。しかし、BMPなどの圧縮がされていないデータでは、素直にデータが読めるので、ファイルフォーマットを読む練習などには都合がよいです。
サンプル
PNGのファイルフォーマットに従って、画像の横幅と高さを読み取る処理を、JavaScriptで書いてみます。PNGファイルを読み込むと、画像の横幅と高さ表示します(その他のファイルは読み込まないでください。HTML5の機能が必要になるので、最新のブラウザで利用する必要があります)。
PNGのファイルフォーマットについては、下記を参考にしました。
<!DOCTYPE html> <html lang="ja"> <head> <title>「ファイルフォーマット」を読むサンプル</title> <script src="http://code.jquery.com/jquery-2.1.1.min.js"> </script> <script> $(function() { $("#fileButton").change(function(event) { // 変更されたファイル情報の一覧を配列として取得 var files = event.target.files; // ファイル情報を1つずつ得て処理していく for (var i = 0; i < files.length; i ++) { // ファイル情報を1つ取得 var f = files[i]; // 「FileReader」を作成 var reader = new FileReader(); // ファイル読み取り完了時のイベント reader.onload = function(e) { // 8 ビット符号なし整数値の配列を取得 var data = e.target.result; var buf = new Uint8Array(data); // イメージヘッダを読み込む var w = 0, h = 0; var ihW = 16, ihH = 20; for (var i = 0; i < 4; i ++) { w += buf[ihW + i] << (3 - i) * 8; h += buf[ihH + i] << (3 - i) * 8; } // 出力 $("#output").text( "画像サイズは、" + "横" + w + "pixel " + "縦" + h + "pixel") }; // テキストとして読み込む reader.readAsArrayBuffer(f); } }); }); </script> </head> <body> <H1>PNGの画像サイズを調べる</H1> <input type="file" id="fileButton"> <div id="output"></div> </body> </html>