summaryrefslogtreecommitdiff
path: root/image_metadata.html
blob: 73e61c8880df26c2bc158d202adacd3b13025600 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>storing irc colorcodes as image/png metadata</title>
<script src="js/vendor/dataUriToBlob.js"></script>
<script src="js/vendor/FileSaver.js"></script>
<script src="js/png.js"></script>
</head>
<body>
  <div id=content>

    load file: <input id=in_file type=file><br>
    or url: <input id=in_url type=text>
    <button id=but_load>load</button><br><br>

    <div id=log></div>
  </div>

</body>
<script>
var dom = {}
var doms = "in_url in_file but_load log".split(' ')
for (var i=0, name; name=doms[i]; i++){
  dom[name] = document.getElementById(name)
}

var log_clear = function(){
  dom.log.innerHTML = ""
}

var log = function(txt){
  var html = dom.log.innerHTML + txt + "<br>"
  dom.log.innerHTML = html
}

var process_png = function(name, buf){
  log("reading " + name)
  var start = Date.now()
  var chunks = PNG.decode(buf, log)
  if (!chunks) return;
  var total = Date.now() - start
  log("took " + total + "ms to decode chunks")
  var chunk_txt = ""
  var itxt_chunks = []
  for (var i=0, c; c=chunks[i]; i++){
    chunk_txt += " " + c.type
    if (c.type === 'iTXt') itxt_chunks.push(c)
  }
  log("found chunks: " + chunk_txt)
  if (!itxt_chunks.length){
    log("no iTXt chunks found")
    return
  }
  var cc_chunks = []
  var start = Date.now()
  for (var i=0, c; c=itxt_chunks[i]; i++){
    var itxt = PNG.decode_itxt_chunk(c)
    if (itxt.keyword && itxt.keyword === 'colorcode')
      cc_chunks.push(itxt)
  }
  var total = Date.now() - start
  if (!cc_chunks.length){
    log("no colorcodes found")
    return
  }
  log("took " + total + "ms to decode iTXt chunks")
  for (var i=0, c; c=cc_chunks[i]; i++){
    log("found colorcode")
    var ta = document.createElement('textarea')
    ta.style.width = '500px'
    ta.style.height = '300px'
    ta.value = c.data
    dom.log.appendChild(ta)
  }

}

dom.in_file.value = ""

dom.in_file.addEventListener('change', function(){
  log_clear()
  var file = this.files[0]
  var r = new FileReader()
  r.addEventListener('load', function(){ 
    process_png(file.name, r.result) 
  })
  r.readAsArrayBuffer(file)
})

dom.but_load.addEventListener('click', function(){
  log_clear()
  var url = "/cgi-bin/proxy?" + dom.in_url.value
  // var url = "http://198.199.72.134/cors/" + dom.in_url.value
  var xhr = new XMLHttpRequest()
  xhr.open('GET', url, true)
  xhr.responseType = 'arraybuffer'
  xhr.addEventListener('load', function(){ 
    process_png(url, xhr.response) 
  })

  xhr.send()

})

</script>
</html>