Skip to content

Instantly share code, notes, and snippets.

@zuk74
Created October 17, 2016 13:42
Show Gist options
  • Select an option

  • Save zuk74/4ee148702d1397fe43f485f47fc74367 to your computer and use it in GitHub Desktop.

Select an option

Save zuk74/4ee148702d1397fe43f485f47fc74367 to your computer and use it in GitHub Desktop.
ppmファイルを読み込みcanvas上に画像を表示する
<!DOCTYPE html>
<html>
<head>
<title>sample</title>
</head>
<body>
<form name="test">
<input type="file" id="selfile"><br>
<textarea name="txt" rows="10" cols="50" readonly></textarea>
</form>
<canvas id="canvas" width="512" height="512"></canvas>
<script>
var obj1 = document.getElementById("selfile");
obj1.addEventListener("change", function(evt) {
var file = evt.target.files;
var reader = new FileReader();
reader.readAsText(file[0]);
reader.onload = function(ev) {
// document.test.txt.value = reader.result;
var lines = reader.result.split("\n");
var len = lines.length;
// document.test.txt.value = len;
var i=0;
while (/^#/.test(lines[i]) ) { i++; }
var type = lines[i];
i++;
while (/^#/.test(lines[i]) ) { i++; }
var sizes = lines[i].split(/\s/);
i++;
while (/^#/.test(lines[i]) ) { i++; }
var depth = lines[i].split(/\s/);
i++;
console.log("start reading.");
console.log("file_length="+len);
console.log("type="+type);
console.log("sizes[0]="+sizes[0]);
console.log("sizes[1]="+sizes[1]);
console.log("depth="+depth);
document.test.txt.value = "type=" + type + ", size=" + sizes[0] + ":" + sizes[1] + "\n";
var datas = [];
for (; i<len; i++) {
datas.push( lines[i] );
}
console.log("done.");
var canvas = document.getElementById('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
console.log("get canvas context.");
var cnt = 0;
for (var y=0; y<sizes[1]; y++) {
for (var x=0; x<sizes[0]; x++) {
ctx.fillStyle = 'rgb('+datas[cnt]+','+datas[cnt+1]+','+datas[cnt+2]+')';
ctx.fillRect( x, y, 1, 1 );
cnt+=3;
}
}
}
console.log("finished.");
}
}, false);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment