他の人が述べたように、サーバーで gzip 圧縮転送を有効にすると、ブラウザは画像を自動的に解凍するはずです。画像が同じ色の広い領域を持つスキャンされたドキュメントである場合、実際には画像がかなり圧縮される可能性があります。航空写真のようなものであれば、それほど多くはありません。
クライアント側にイメージがあるので、もう 1 つの問題があります。800 万個の 16 ビット ピクセルをどうするかです。
配列を型付けする前に、文字列を使用して任意のデータを表す必要がありました。JavaScript では文字列は 16 ビット コード単位のシーケンスであり、UTF-16 でエンコードされたテキストとして解釈される可能性があるため、これは思ったより安全です。JavaScript は、無効なエンコーディングの文字列に対してまったく問題ありません。
これは、画像を 1 つの長い文字列として保存し、 を使用して個々のピクセルにアクセスできることを意味しますcharCodeAt
。これは、ほとんどの操作目的でかなり高速です。
16 ビットのバイナリ データ (実際には PNG アイコン) を文字列に読み込み、最初の 16 要素を出力する例を次に示します。
$.ajax({
url:"http://fiddle.jshell.net/favicon.png",
success: function(data) {
// Now we have the data, let's show it:
var out = "";
for (var i = 0; i < 16; i++) {
out += ","+data.charCodeAt(i).toString(16);
}
console.log(out.substring(1));
},
beforeSend: function ( xhr ) {
xhr.overrideMimeType("text/plain; charset=utf-16be");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("ERROR: "+textStatus+" "+errorThrown);
console.log(jqXHR);
},
})
( jsfiddleでの実例)