Last active
May 23, 2016 23:49
-
-
Save marisusis/409ce8f61422aa8ffa3fc5d0ec207925 to your computer and use it in GitHub Desktop.
asfd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Author: Andrei Gheorghe (http://github.com/idevelop) | |
var ascii = (function() { | |
function asciiFromCanvas(canvas, options) { | |
// Original code by Jacob Seidelin (http://www.nihilogic.dk/labs/jsascii/) | |
// Heavily modified by Andrei Gheorghe (http://github.com/idevelop) | |
var characters = (" .,:;i1tfLCG08@").split(""); | |
var context = canvas.getContext("2d"); | |
var canvasWidth = canvas.width; | |
var canvasHeight = canvas.height; | |
var asciiCharacters = ""; | |
// calculate contrast factor | |
// http://www.dfstudios.co.uk/articles/image-processing-algorithms-part-5/ | |
var contrastFactor = (259 * (options.contrast + 255)) / (255 * (259 - options.contrast)); | |
var imageData = context.getImageData(0, 0, canvasWidth, canvasHeight); | |
for (var y = 0; y < canvasHeight; y += 2) { // every other row because letters are not square | |
for (var x = 0; x < canvasWidth; x++) { | |
// get each pixel's brightness and output corresponding character | |
var offset = (y * canvasWidth + x) * 4; | |
var color = getColorAtOffset(imageData.data, offset); | |
// increase the contrast of the image so that the ASCII representation looks better | |
// http://www.dfstudios.co.uk/articles/image-processing-algorithms-part-5/ | |
var contrastedColor = { | |
red: bound(Math.floor((color.red - 128) * contrastFactor) + 128, [0, 255]), | |
green: bound(Math.floor((color.green - 128) * contrastFactor) + 128, [0, 255]), | |
blue: bound(Math.floor((color.blue - 128) * contrastFactor) + 128, [0, 255]), | |
alpha: color.alpha | |
}; | |
// calculate pixel brightness | |
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color | |
var brightness = (0.299 * contrastedColor.red + 0.587 * contrastedColor.green + 0.114 * contrastedColor.blue) / 255; | |
var character = characters[(characters.length - 1) - Math.round(brightness * (characters.length - 1))]; | |
asciiCharacters += '<span style="background-color:rgb('+contrastedColor.red+','+contrastedColor.green+','+contrastedColor.blue+'">'+character+'</span>'; | |
} | |
asciiCharacters += "<br>"; | |
} | |
options.callback(asciiCharacters); | |
} | |
function getColorAtOffset(data, offset) { | |
return { | |
red: data[offset], | |
green: data[offset + 1], | |
blue: data[offset + 2], | |
alpha: data[offset + 3] | |
}; | |
} | |
function bound(value, interval) { | |
return Math.max(interval[0], Math.min(interval[1], value)); | |
} | |
return { | |
fromCanvas: function(canvas, options) { | |
options = options || {}; | |
options.contrast = (typeof options.contrast === "undefined" ? 128 : options.contrast); | |
options.callback = options.callback || doNothing; | |
return asciiFromCanvas(canvas, options); | |
} | |
}; | |
})(); | |
function fromImage(url) { | |
var canvas = document.createElement('canvas'); | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(url,0,0); | |
ascii(canvas,{callback:function(a) { | |
document.write(a); | |
}}); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Author: Andrei Gheorghe (http://github.com/idevelop) | |
var ascii = (function() { | |
function asciiFromCanvas(canvas, options) { | |
// Original code by Jacob Seidelin (http://www.nihilogic.dk/labs/jsascii/) | |
// Heavily modified by Andrei Gheorghe (http://github.com/idevelop) | |
var characters = (" .,:;i1tfLCG08@").split(""); | |
var context = canvas.getContext("2d"); | |
var canvasWidth = canvas.width; | |
var canvasHeight = canvas.height; | |
var asciiCharacters = ""; | |
// calculate contrast factor | |
// http://www.dfstudios.co.uk/articles/image-processing-algorithms-part-5/ | |
var contrastFactor = (259 * (options.contrast + 255)) / (255 * (259 - options.contrast)); | |
var imageData = context.getImageData(0, 0, canvasWidth, canvasHeight); | |
for (var y = 0; y < canvasHeight; y += 2) { // every other row because letters are not square | |
for (var x = 0; x < canvasWidth; x++) { | |
// get each pixel's brightness and output corresponding character | |
var offset = (y * canvasWidth + x) * 4; | |
var color = getColorAtOffset(imageData.data, offset); | |
// increase the contrast of the image so that the ASCII representation looks better | |
// http://www.dfstudios.co.uk/articles/image-processing-algorithms-part-5/ | |
var contrastedColor = { | |
red: bound(Math.floor((color.red - 128) * contrastFactor) + 128, [0, 255]), | |
green: bound(Math.floor((color.green - 128) * contrastFactor) + 128, [0, 255]), | |
blue: bound(Math.floor((color.blue - 128) * contrastFactor) + 128, [0, 255]), | |
alpha: color.alpha | |
}; | |
// calculate pixel brightness | |
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color | |
var brightness = (0.299 * contrastedColor.red + 0.587 * contrastedColor.green + 0.114 * contrastedColor.blue) / 255; | |
var character = characters[(characters.length - 1) - Math.round(brightness * (characters.length - 1))]; | |
asciiCharacters += '<span style="background-color:rgb('+contrastedColor.red+','+contrastedColor.green+','+contrastedColor.blue+'">'+character+'</span>'; | |
} | |
asciiCharacters += "<br>"; | |
} | |
options.callback(asciiCharacters); | |
} | |
function getColorAtOffset(data, offset) { | |
return { | |
red: data[offset], | |
green: data[offset + 1], | |
blue: data[offset + 2], | |
alpha: data[offset + 3] | |
}; | |
} | |
function bound(value, interval) { | |
return Math.max(interval[0], Math.min(interval[1], value)); | |
} | |
return { | |
fromCanvas: function(canvas, options) { | |
options = options || {}; | |
options.contrast = (typeof options.contrast === "undefined" ? 128 : options.contrast); | |
options.callback = options.callback || doNothing; | |
return asciiFromCanvas(canvas, options); | |
} | |
}; | |
})(); | |
function fromImage(url) { | |
var canvas = document.createElement('canvas'); | |
var img = document.createElement('img'); | |
img.src=url; | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(img,0,0); | |
ascii(canvas,{callback:function(a) { | |
document.write(a); | |
}}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment