diff --git a/dev.php b/dev.php deleted file mode 100644 index f30dc46..0000000 --- a/dev.php +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Franz - client side color palettes from logos - - - - - -

Franz - client side color swatches

- -
- Upload an image -
- - -
- -
-
- - -
-
- - -
-

Try out: - lol.png, - testjubs.jpg, - stars.jpg, - 1600.jpg, - fallout.jpg -

- -
- - -
- -
-

- Sort by Hue - Saturation (HSV) - Saturation (HSL) - Value (HSV) - Lightness (HSL) -

-
- -
-
- -
-
- - - - - - - - - - - diff --git a/index.php b/index.php index aebe5e0..2927dbc 100644 --- a/index.php +++ b/index.php @@ -86,7 +86,7 @@ Upload an image
- +
diff --git a/js/dev.js b/js/dev.js deleted file mode 100644 index 38702e8..0000000 --- a/js/dev.js +++ /dev/null @@ -1,237 +0,0 @@ -/* Franz.js - Client side color swatches (awesomeness) - * - * @Author Ryan McGrath (http://twitter.com/ryanmcgrath) - * @Author Dominick Pham (http://twitter.com/enotionz) - */ - -/* Define some basic prototypes that we'll require later.. */ - -Array.prototype.swap = function(a, b) { - var tmp = this[a]; - this[a] = this[b]; - this[b] = tmp; - return true; /* For the sake of being complete */ -} - -/* allows numeric sorting for built in js sort */ -function sortNumber(a,b) { return a - b;} - -/* Franz - this is where the magic happens, pay close attention. ;) */ -var franz = { - canvas: {}, - ctx: {}, - img: {}, - - alpha: [], - red: [], - green: [], - blue: [], - - hue: [], - satV: [], - value: [], - satL: [], - light: [], - - origIndex: [], - - init: function(canvas_id) { - franz.canvas = document.getElementById(canvas_id); - franz.ctx = franz.canvas.getContext('2d'); - return false; - }, - - clone: function(obj) { - /* Recursively iterate through objects and clone them (Don't even try to put this on the Object prototype (recursion fail)) */ - var returnObj = (obj instanceof Array) ? [] : {}; - - for(i in obj) { - if(i == 'clone') continue; - if(obj[i] != null && typeof obj[i] == "object") { - returnObj[i] = franz.clone(obj[i]); - } else { - returnObj[i] = obj[i]; - } - } - - return returnObj; - }, - - loadImg: function(img_src) { - franz.img = new Image(); - franz.img.onload = function() { - franz.ctx.drawImage(franz.img, 0, 0, 100, 100); - setTimeout(function() { franz.getColors(); }, 100); - } - franz.img.src = img_src; - return false; - }, - - getColors: function() { - var hidden_canvas = document.getElementById("lol_hidden"), - extra_ctx = hidden_canvas.getContext('2d'); - - extra_ctx.drawImage(franz.img, 0, 0, 33, 33); - var imageData = extra_ctx.getImageData(1, 1, 32, 32).data; - - for(var i = 0; i*4 < imageData.length; i++) { - franz.red[i] = imageData[i*4]; - franz.green[i] = imageData[i*4 + 1]; - franz.blue[i] = imageData[i*4 + 2]; - franz.alpha[i] = imageData[i*4 + 3]; - } - - /* get hue sat val array */ - franz.RGBtoHSVHL(); - - /* show original image */ - franz.displayImg(); - - return false; - }, - - /* Converts RGB to the Hue/Saturation/Value, Saturation/Lightness model */ - RGBtoHSVHL: function() { - var min, max; - - for(var i = 0; i < franz.alpha.length; i++) { - franz.value[i] = franz.getValHSV(franz.red[i],franz.green[i],franz.blue[i]); - franz.satV[i] = franz.getSatHSV(franz.red[i],franz.green[i],franz.blue[i]); - franz.hue[i] = franz.getHue(franz.red[i],franz.green[i],franz.blue[i]); - - franz.satL[i] = franz.getSatHSL(franz.red[i],franz.green[i],franz.blue[i]); - franz.light[i] = franz.getLightHSL(franz.red[i],franz.green[i],franz.blue[i]); - } - - return false - }, - - getHue: function(red, green, blue) { - var min = Math.min(red, Math.min(green, blue)), - max = Math.max(red, Math.max(green, blue)), - delta = max - min, - hue; - - if (max == min) - return 0; - else { - if(red == max) - hue = (green - blue) / delta; //between yellow & magenta - else if(green == max) - hue = 2 + (blue - red) / delta; //between cyan & yellow - else - hue = 4 + (red - green) / delta; //between magenta & cyan - - // hue degrees - hue = hue * 60; - if(hue < 0) hue += 360; - } - - return hue; - }, - - getSatHSV: function(red, green, blue) { - var min = Math.min(red, Math.min(green, blue)), - max = Math.max(red, Math.max(green, blue)), - delta = max - min, - sat = delta / max; - - return sat; - }, - - getValHSV: function(red, green, blue) { return Math.max(red, Math.max(green,blue)); }, - - getSatHSL: function(red, green, blue) { - var min = Math.min(red, Math.min(green, blue)), - max = Math.max(red, Math.max(green, blue)), - lightness = franz.getLightHSL(), - sat; - - if(min == max) return 0; - - if(lightness < 1/2) sat = (max-min)/(max+min); - else sat = (max - min) / (2 - (max + min)); - - return sat; - }, - - getLightHSL: function(red, green, blue) { - var min = Math.min(red, Math.min(green, blue)), - max = Math.max(red, Math.max(green, blue)); - return 0.5 * (min + max); - }, - - displayColors: function(order_array) { - var docStr = ""; - - for(var i = 0; i < franz.alpha.length; i++) { - docStr += '
'; - } - - document.getElementById("log_colors").innerHTML = docStr; - if(typeof jQuery != "undefined") $("#container_bottom").fadeIn("slow"); - else document.getElementById("container_bottom").style.display = "block"; - - return false; - }, - - resetIndex: function() { - /* keep track of original index so we don't have to revert - back to RGB just to display output */ - for (var i=0; i < franz.alpha.length; i++) { - franz.origIndex[i] = i; - } - return false; - }, - - displayImg: function() { - franz.resetIndex(); - franz.displayColors(franz.origIndex); - return false; - }, - - displayHue: function() { - franz.indexSort(franz.clone(franz.hue), 0, franz.alpha.length); - franz.displayColors(franz.origIndex); - return false; - }, - - displaySat: function() { - franz.indexSort(franz.clone(franz.satV), 0, franz.alpha.length); - franz.displayColors(franz.origIndex); - return false; - }, - - displayVal: function() { - franz.indexSort(franz.clone(franz.value), 0, franz.alpha.length); - franz.displayColors(franz.origIndex); - return false; - }, - - displaySatL: function() { - franz.indexSort(franz.clone(franz.satL), 0, franz.alpha.length); - franz.displayColors(franz.origIndex); - return false; - }, - - displayLight: function() { - franz.indexSort(franz.clone(franz.light), 0, franz.alpha.length); - franz.displayColors(franz.origIndex); - return false; - }, - - /* bubble sort floats around and pops in your face */ - indexSort: function(inputArray, start, end) { - franz.resetIndex(); - for (var i = start; i < end; i++) { - for (var j = end-1; j >= start; j--) { - var diff = inputArray[j] - inputArray[i] - if (diff > 0) { - inputArray.swap(i,j+1); - franz.origIndex.swap(i,j+1); - } - } - } - } - -} diff --git a/js/franz.js b/js/franz.js index ce73cbe..38702e8 100644 --- a/js/franz.js +++ b/js/franz.js @@ -71,8 +71,8 @@ var franz = { var hidden_canvas = document.getElementById("lol_hidden"), extra_ctx = hidden_canvas.getContext('2d'); - extra_ctx.drawImage(franz.img, 0, 0, 19, 19); - var imageData = extra_ctx.getImageData(1, 1, 18, 18).data; + extra_ctx.drawImage(franz.img, 0, 0, 33, 33); + var imageData = extra_ctx.getImageData(1, 1, 32, 32).data; for(var i = 0; i*4 < imageData.length; i++) { franz.red[i] = imageData[i*4]; @@ -165,7 +165,7 @@ var franz = { var docStr = ""; for(var i = 0; i < franz.alpha.length; i++) { - docStr += '
'; + docStr += '
'; } document.getElementById("log_colors").innerHTML = docStr; @@ -220,44 +220,17 @@ var franz = { return false; }, - - /* calculates density of array data given interval and step size - both controlling data error - step size should ideally be < interval. Returns array with (# of intervals) as size */ - getDensity: function(inputArray, step, interval, max) { - var size = max/step; - var densityArray = new Array(size); - - for (var i=0; i < size; i++) { - var count = 0; - - for (var j=0; j < inputArray.length; j++) { - // if entry is within current interval - if ((inputArray[j] > i*step) && (inputArray[j] < i*step + interval)){ - count++; - } - } - console.log("frequency of values between " + i*step + " and " + (i*step + interval) + " = " + count); - densityArray[i] = count; - } - - return densityArray; - }, - /* bubble sort floats around and pops in your face */ indexSort: function(inputArray, start, end) { franz.resetIndex(); for (var i = start; i < end; i++) { for (var j = end-1; j >= start; j--) { var diff = inputArray[j] - inputArray[i] - //console.log("j=" + inputArray[j] + " i=" + inputArray[i] + " -> " + diff); if (diff > 0) { - //console.log("swapped"); inputArray.swap(i,j+1); franz.origIndex.swap(i,j+1); } - //if (j == end-20) break; } - //if (i == 20) break; } }