Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <head>
- <title>LUA GENARATION IMAGE</title>
- <script type="text/javascript">
- var DEBUG ;
- var PIXEL_W = 6 ;
- var PIXEL_H = 8 ;
- var T_MONITOR_H = [ 0, 5,12,19,26,33,40] ;
- var T_MONITOR_W = [ 0, 7,18,29,39,50,61,71,82] ;
- var MONITOR_H = 5 ;
- var MONITOR_W = 7 ;
- var MAX_MONITOR_W = 8 ;
- var MAX_MONITOR_H = 6 ;
- var PIXEL_BORD_MONITOR = 12 ;
- var CARRON_RATE = 10 ;
- var CARRON_OFFSET = 0 ;
- var COLOR = [
- [255,255,255],
- [255,127,0],
- [255,0,255],
- [173,216,230],
- [255,255,0],
- [158,253,56],
- [255,192,203],
- [128,128,128],
- [211,211,211],
- [0,255,255],
- [128,0,128],
- [0,0,255],
- [150,75,0],
- [0,128,0],
- [255,0,0],
- [0,0,0],
- ];
- // Color en hls
- var COLOR_HLS = new Array() ;
- ImageData.prototype.getPixel = function(x,y){
- return [ this.data[(x+y*this.width)*4] ,
- this.data[(x+y*this.width)*4 + 1] ,
- this.data[(x+y*this.width)*4 + 2] ,
- this.data[(x+y*this.width)*4 + 3] ,
- ];
- }
- ImageData.prototype.setPixel = function(x,y,r,v,g,a){
- this.data[(x+y*this.width)*4] = r ;
- this.data[(x+y*this.width)*4 + 1] = v ;
- this.data[(x+y*this.width)*4 + 2] = g ;
- this.data[(x+y*this.width)*4 + 3] = a ;
- }
- function RGBtoHSL(r,g,b){
- var r1 = r / 255;
- var g1 = g / 255;
- var b1 = b / 255;
- var maxColor = Math.max(r1,g1,b1);
- var minColor = Math.min(r1,g1,b1);
- //Calcul L:
- var L = (maxColor + minColor) / 2 ;
- var S = 0;
- var H = 0;
- if(maxColor != minColor){
- //Calcul S:
- if(L < 0.5){
- S = (maxColor - minColor) / (maxColor + minColor);
- }else{
- S = (maxColor - minColor) / (2.0 - maxColor - minColor);
- }
- //Calcul H:
- if(r1 == maxColor){
- H = (g1-b1) / (maxColor - minColor);
- }else if(g1 == maxColor){
- H = 2.0 + (b1 - r1) / (maxColor - minColor);
- }else{
- H = 4.0 + (r1 - g1) / (maxColor - minColor);
- }
- }
- H = H * 60;
- if(H<0){
- H += 360;
- }
- return [H, S, L];
- }
- /**
- Retourne la couleur la plus proche
- */
- function getConsoleColor(r,g,b){
- var rate = document.getElementById('Crate').value ;
- var offset = document.getElementById('Coffset').value ;
- var s_HLS = RGBtoHSL(r,g,b);
- var fid = -1 ;
- var distance_min = null ;
- for( var id in COLOR ){
- var distance = distanceCarron(s_HLS[0],s_HLS[1],s_HLS[2],
- COLOR_HLS[id][0],COLOR_HLS[id][1],COLOR_HLS[id][2],
- rate,offset);
- //console.log(distance);
- if( distance < distance_min || distance_min == null ){
- fid = id ;
- distance_min =distance ;
- }
- }
- return COLOR[fid];
- };
- function distanceCarron(h0,l0,s0,h1,s1,l1,rate,offset){
- var a_s0 = ( (Math.PI / 2) + Math.atan(rate*(s0-offset)) ) / Math.PI ;
- var a_s1 = ( (Math.PI / 2) + Math.atan(rate*(s1-offset)) ) / Math.PI ;
- var alpha = Math.sqrt(a_s0*a_s1);
- var delta_h = Math.min( Math.abs(h1-h0) , 1 - Math.abs(h1-h0) );
- var delta_l = Math.abs( l1 - l0 ) ;
- var distance = (alpha * delta_h) + ( (1- alpha) * delta_l ) ;
- return Math.abs(distance);
- //return distance ;
- }
- function dessineImage(canvas,ctx,img){
- var deltaWidth = canvas.width / img.width ;
- var deltaHeight = canvas.height / img.height ;
- var delta = Math.min(deltaWidth,deltaHeight)
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.drawImage(img,
- (canvas.width-img.width*delta)/2,
- (canvas.height-img.height*delta)/2,
- img.width*delta,
- img.height*delta)
- }
- /*
- function regroupePixel(data,x,y){
- }
- //*/
- function dessineEcran(canvasSource,x,y,w,h){
- var nbMonitorH = document.getElementById('nbMonitorH').value ;
- var nbMonitorW = document.getElementById('nbMonitorW').value ;
- var canvas = document.getElementById("canvasResult")
- var ctx = canvas.getContext("2d");
- //*
- var canvas2 = document.getElementById("canvasResult2")
- var ctx2 = canvas2.getContext("2d");
- //*/
- var tempCanvas = document.createElement('canvas')
- tempCanvas.width = w ;
- tempCanvas.height = h ;
- var data = canvasSource.getContext("2d").getImageData(x,y,w,h);
- tempCanvas.getContext("2d").putImageData(data,0,0)
- canvas.width = T_MONITOR_W[nbMonitorW] * PIXEL_W ;
- canvas.height = T_MONITOR_H[nbMonitorH] * PIXEL_H;
- //*
- canvas2.width = T_MONITOR_W[nbMonitorW] * PIXEL_W ;
- canvas2.height = T_MONITOR_H[nbMonitorH] * PIXEL_H;
- //*/
- ctx.drawImage(tempCanvas,0,0,canvas.width,canvas.height)
- data = ctx.getImageData(0,0,canvas.width,canvas.height);
- //*
- data2 = ctx2.getImageData(0,0,canvas.width,canvas.height);
- //*/
- //DEBUG =data;
- //console.log(data)
- //console.log(canvas.width)
- for( var w = 0 ; w < T_MONITOR_W[nbMonitorW] ; w++ ){
- for( var h = 0 ; h < T_MONITOR_H[nbMonitorH] ;h++ ) {
- var nbPixel = PIXEL_W * PIXEL_H ;
- var TR = 0 ;
- var TG = 0 ;
- var TB = 0 ;
- for( var pw = 0 ; pw < PIXEL_W ; pw++){
- for( var ph = 0 ; ph < PIXEL_H ; ph++){
- var tx = w*PIXEL_W+pw;
- var th = h*PIXEL_H+ph;
- var pixel = data.getPixel(tx,th)
- TR += pixel[0]
- TG += pixel[1]
- TB += pixel[2]
- }
- }
- TR /= nbPixel ;
- TG /= nbPixel ;
- TB /= nbPixel ;
- CConsole = getConsoleColor(TR,TG,TB);
- for( var pw = 0 ; pw < PIXEL_W ; pw++){
- for( var ph = 0 ; ph < PIXEL_H ; ph++){
- var tx = w*PIXEL_W+pw;
- var th = h*PIXEL_H+ph;
- data.setPixel(tx,th,TR,TG,TB,255);
- data2.setPixel(tx,th,CConsole[0],CConsole[1],CConsole[2],255);
- }
- }
- }
- }
- ctx.putImageData(data,0,0);
- ctx2.putImageData(data2,0,0)
- //creation du code
- }
- window.onload = function(){
- document.getElementById('b1').addEventListener('click',function(){
- var c1 = document.getElementById('c1').value;
- var c2 = document.getElementById('c2').value;
- var c3 = document.getElementById('c3').value;
- var c = getConsoleColor(c1,c2,c3) ;
- document.getElementById('cc1').style.backgroundColor = 'rgb('+c1+','+c2+','+c3+')' ;
- document.getElementById('cc2').style.backgroundColor = 'rgb('+c[0]+','+c[1]+','+c[2]+')' ;
- },true);
- var butGen = document.getElementById("genere");
- var urlImg = document.getElementById("urlImage");
- var canvas = document.getElementById("canvas");
- var ctx = canvas.getContext("2d");
- var img = document.createElement("img")
- if( localStorage['temp'] != undefined ){
- img.src = localStorage['temp']
- }
- for( var id in COLOR ){
- COLOR_HLS.push(RGBtoHSL(COLOR[id][0],COLOR[id][1],COLOR[id][2]));
- }
- urlImg.addEventListener('change',function(e){
- var fr = new FileReader();
- fr.onload = function(e){
- img.src = e.target.result
- localStorage['temp'] = e.target.result
- };
- fr.readAsDataURL(e.target.files[0]);
- },false);
- butGen.addEventListener('click',function(){
- //Dessine l'image pour le cadrage
- dessineImage(canvas,ctx,img)
- //temp
- var deltaWidth = canvas.width / img.width ;
- var deltaHeight = canvas.height / img.height ;
- var delta = Math.min(deltaWidth,deltaHeight)
- /*data = ctx.getImageData((canvas.width-img.width*delta)/2,
- (canvas.height-img.height*delta)/2,
- img.width*delta,
- img.height*delta);*/
- dessineEcran(canvas,(canvas.width-img.width*delta)/2,
- (canvas.height-img.height*delta)/2,
- img.width*delta,
- img.height*delta);
- //}
- },true);
- }
- </script>
- </head>
- <body>
- <input type="file" id="urlImage">
- <button id="genere">Généré</button>
- <span>Nb monitor W</span>
- <select id='nbMonitorW'>
- <option value='1'>1</option>
- <option value='2'>2</option>
- <option value='3'>3</option>
- <option value='4'>4</option>
- <option value='5'>5</option>
- <option value='6'>6</option>
- <option value='7'>7</option>
- <option value='8' selected="selected" >8</option>
- </select>
- <span>Nb monitor H</span>
- <select id='nbMonitorH' >
- <option value='1'>1</option>
- <option value='2'>2</option>
- <option value='3'>3</option>
- <option value='4'>4</option>
- <option value='5'>5</option>
- <option value='6' selected="selected" >6</option>
- </select>
- <span>CARRON RATE</span>
- <input id='Crate' type='text' value='0.07'>
- <span>CARRON OFFSET</span>
- <input id='Coffset' type='text' value='50'>
- <br>
- <canvas style="border:1px solid black" id='canvas' width="300" height="300" ></canvas><br>
- <canvas style="border:1px solid black" id='canvasResult'></canvas>
- <canvas style="border:1px solid black" id='canvasResult2'></canvas>
- <textarea id="code"></textarea>
- <div>
- <span>R</span><input type="number" id='c1' min="0" max="255" value='128'>
- <span>G</span><input type="number" id='c2' min="0" max="255" value='0'>
- <span>B</span><input type="number" id='c3' min="0" max="255" value='64' >
- <button id='b1'>Color Teste</button>
- </div>
- <div id="cc1" style='height:50px;background-color:red'></div>
- <div id="cc2" style='height:50px;background-color:red'></div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement