前回サーバーからデータを取ってくる処理を作ったんだけど、ぶっちゃけXML処理すんのめんどくせーなーと思った訳です。
で、パーフェクトjavascriptをぱらぱらーっとめくってみたら、JSONでやったほうが楽じゃね?みたいな記述を発見。
というわけで、さくっと書き換え。
そうするとえらく処理を書くのが楽になったので、今日はさらに突っ込んでサーバー側で画像ファイルをbase64エンコードして、クライアント側でデコードする所までやってみました。
まずサーバー側。
use JSON;
use lib "./module";
use ResourceTranslator;
my $app = sub {
my $output_data = ResourceTranslator->get_image_data();
my $json_data = JSON->new->encode($output_data);
return [
200,
[ContentType => "text/plain"],
[$json_data],
];
}
package ResourceTranslator;
use strict;
use warnings;
use MIME::Base64;
sub get_image_data {
my $file = "画像ファイル";
my $mime_type = "gif";
my $file_size = -s $file;
my $binary;
{
open my $IN, " "data:image/" . $mime_type . ";base64," . $result,
};
}
1;
そしてクライアント側がこんな感じ
var button = document.getElementById('ajax');
button.onclick = function() {
var xmr = new XMLHttpRequest();
xmr.onreadystatechange = function() {
if (xmr.readyState == 4 && xmr.status == 200) {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var response = JSON.parse(xmr.responseText);
var image = new Image();
image.onload = function() {
ctx.drawImage(image, 0, 0);
}
image.src = response.image;
}
};
xmr.open('GET', 'サーバーのアドレス');
xmr.send(null);
};
やりたいのはjavascriptゲームで画像ファイルの隠蔽です。
まあ、こんなことやってもサーバーに直接アクセスしたら文字列データは取ってくることができるんで、あんまり意味ないんですけどね。