Advertisement
12Me21

doduo

Feb 21st, 2017
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>16 bit SB image ditherer</title>
  5. <link rel="icon" type="image/png" sizes="16x16" href="./resources/inactive.png">
  6. <script>
  7. window.onload=function(){
  8. //get elements
  9. var canvas=document.getElementById("canvas")
  10. var resize=document.getElementById("resize")
  11. var upload=document.getElementById("upload")
  12. //upload image and convert
  13. upload.onchange=function(){
  14. resize.onchange=null
  15. var reader=new FileReader()
  16. reader.onload=function(){
  17. var image=new Image()
  18. image.onload=function(){
  19. convert(canvas,image,resize.checked)
  20. resize.onchange=function(){convert(canvas,image,resize.checked)}
  21. } //end
  22. image.src=this.result
  23. } //end
  24. reader.readAsDataURL(this.files[0])
  25. } //end
  26. } //end
  27.  
  28. //converter function
  29. function convert(canvas,image,resize){
  30. var c2d=canvas.getContext("2d")
  31. console.log(resize)
  32. if (resize===true){
  33. canvas.width=512
  34. canvas.height=512
  35. c2d.drawImage(image,0,0,512,512)
  36. } else {
  37. canvas.width=image.width
  38. canvas.height=image.height
  39. c2d.drawImage(image,0,0)
  40. } //endif
  41. var data=c2d.getImageData(0,0,canvas.width,canvas.height)
  42. var err=new Array(3)
  43. var width=canvas.width*4;
  44. //Floyd–Steinberg dithering is pretty popular, so it's probably good.
  45. for(var i=0;i<data.data.length;i+=4){
  46. for(j=0;j<3;j++){
  47. err[j]=(data.data[i+j]&0b00000111)/16
  48. data.data[i+j]&=0b11111000
  49. data.data[i+ 4+j]+=err[j]*7
  50. data.data[i+width-4+j]+=err[j]*3
  51. data.data[i+width +j]+=err[j]*5
  52. data.data[i+width+4+j]+=err[j]
  53. } //next
  54. } //next
  55. c2d.putImageData(data,0,0)
  56. } //end
  57. </script>
  58. </head>
  59. <body>
  60. <input type="file" id="upload">
  61. <input type="checkbox" id="resize"> Rezize to 512x512
  62. <hr>
  63. <canvas id="canvas" ></canvas>
  64. </body>
  65. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement