@@ -22,9 +22,15 @@ function readValues(inps){
2222    } ) 
2323  return  vals ; 
2424} 
25+ function  setCanvasSize ( canvas , width , height , scale ) { 
26+     Object . assign ( canvas , { width :width * scale , height :height * scale } ) ; 
27+     var  ctx  =  canvas . getContext ( "2d" ) ; 
28+     ctx . setTransform ( 1 ,  0 ,  0 ,  1 ,  0 ,  0 ) ; 
29+     ctx . scale ( scale , scale ) ; 
30+     ctx . imageSmoothingEnabled  =  false ; 
31+ } 
2532function  drawBootscreen ( canvas , screen , size ) { 
26-     Object . assign ( canvas , { width :screen . width * size , height :screen . height * size } ) ; 
27- 
33+     setCanvasSize ( canvas , screen . width , screen . height , size ) ; 
2834    function  reader ( screen ) { 
2935      var  bit = 0x80 >> ( screen . pos % 8 ) ; 
3036      var  pixel = ! ! ( screen . data [ parseInt ( screen . pos / 8 ) ] & bit ) ; 
@@ -37,24 +43,58 @@ function drawBootscreen(canvas,screen,size){
3743      for  ( var  x = 0 ; screen . width > x ; x ++ ) 
3844        if  ( reader ( screen ) ) { 
3945          ctx . beginPath ( ) ; 
40-           ctx . rect ( x * size , y * size , size , size ) 
46+           ctx . rect ( x , y , 1 , 1 ) 
4147          ctx . fillStyle = "black" ; 
4248          ctx . fill ( ) ; 
4349        } 
4450    } 
4551} 
46- function  imgReader ( file , img , canv ) { 
47-   var  destCtx  =  canv [ 0 ] . getContext ( '2d' ) ; 
48-   Object . assign ( canv [ 0 ] , { width :5 * 128 , height :5 * 64 } ) ; 
49-   destCtx . scale ( 5 ,  5 ) ; 
50-   destCtx . imageSmoothingEnabled  =  false ; 
52+ function  createBootscreen ( canvas , width , height ) { 
53+     var  inrow = Math . ceil ( width / 8 ) ; 
54+     var  buffer = new  ArrayBuffer ( inrow * height ) ; 
55+     var  ar8 = new  Uint8Array ( buffer ) ; 
56+     function  writer ( row , x , data ) { 
57+       if  ( data ) 
58+         ar8 [ row + Math . floor ( x / 8 ) ] |= 0x80 >> ( x % 8 ) ; 
59+     } 
60+     var  ctx  =  canvas . getContext ( "2d" ) ; 
61+     var  data  =  ctx . getImageData ( 0 ,  0 ,  width ,  height ) . data ; 
62+     var  pixel  =  0 ; 
63+     for  ( var  y = 0 ; height > y ; y ++ ) { 
64+       for  ( var  x = 0 ; width > x ; x ++ , pixel += 4 ) 
65+         writer ( y * Math . floor ( width / 8 ) , x , data [ pixel ] == 0 ) ; 
66+     } 
67+     var  pos = 0 , lines = '' ; 
68+     for  ( var  i = 0 ; i < ar8 . length ; i ++ ) 
69+       lines += '0x' + ( '0' + ar8 [ pos ++ ] . toString ( 16 ) ) . slice ( - 2 ) + ',' + ( pos % 8 ?' ' :'\n' ) ; 
70+     return  lines ; 
71+ } 
72+ var  resized ;  //global 
73+ function  imgReader ( file , img , canv , inps ) { 
74+   var  scale = 5 ; 
75+   var  canvas = canv [ 0 ] ; 
76+   function  setAspect ( ) { 
77+     var  width = inps . eq ( 0 ) . val ( ) , height = inps . eq ( 1 ) . val ( ) ; 
78+     img . cropper ( 'setAspectRatio' ,  width / height ) ; 
79+   } 
80+   setCanvasSize ( canvas , inps . eq ( 0 ) . val ( ) , inps . eq ( 1 ) . val ( ) , scale ) ; 
81+   inps . on ( 'change' , function ( ) { 
82+     var  width = parseInt ( inps . eq ( 0 ) . val ( ) ) , height = parseInt ( inps . eq ( 1 ) . val ( ) ) ; 
83+     if  ( canvas . width / scale  !=  width  ||  canvas . height / scale  !=  height  ) { 
84+       setCanvasSize ( canvas , width , height , scale ) ; 
85+       setAspect ( ) ; 
86+     } else 
87+       img . trigger ( 'crop' ) ; 
88+   } ) 
5189  file . on ( 'change' ,  function  ( evt )  { 
5290    var  tgt  =  evt . target  ||  window . event . srcElement , 
5391        files  =  tgt . files ; 
5492    // FileReader support 
5593    if  ( FileReader  &&  files  &&  files . length )  { 
5694        var  fr  =  new  FileReader ( ) ; 
5795        fr . onload  =  function  ( )  { 
96+             setCanvasSize ( canvas , inps . eq ( 0 ) . val ( ) , inps . eq ( 1 ) . val ( ) , scale ) ; 
97+             setAspect ( ) ; 
5898            img . attr ( 'src' , fr . result ) ; 
5999            img . cropper ( 'replace' ,  fr . result ) ; 
60100        } 
@@ -66,23 +106,19 @@ function imgReader(file,img,canv){
66106        zoomable : false , 
67107        rotatable : false , 
68108        scalable : false , 
69-         aspectRatio : 2 , 
109+         aspectRatio : 1 , 
70110        minCropBoxWidth :10 , 
71111        maxCropBoxWidth :10 , 
72112        viewMode :1 , 
73113      } ; 
74114  img . cropper ( cropDefs ) ; 
75-   img . on ( 'aspect' , function ( ev , aspect ) { 
76-     cropDefs . aspectRatio  =  aspect ; 
77-     img . cropper ( 'destroy' ) . cropper ( cropDefs ) ; 
78-   } ) ; 
79115  img . on ( 'crop' , function ( ) { 
116+     var  width = inps . eq ( 0 ) . val ( ) , height = inps . eq ( 1 ) . val ( ) ; 
80117    var  sel = img . cropper ( 'getData' ) ; 
81-     var  canvas = cropImage ( img , sel . x , sel . y , sel . width , sel . height , 128 , 64 ) ; 
82-     toBW ( canvas ) ; 
83-     var  ctx  =  canvas . getContext ( "2d" ) ; 
84-     var  destCtx  =  canv [ 0 ] . getContext ( '2d' ) ; 
85-     destCtx . drawImage ( canvas ,  0 ,  0 ) ; 
118+     resized = cropImage ( img , sel . x , sel . y , sel . width , sel . height , width , height ) ; 
119+     toBW ( resized , parseInt ( inps . eq ( 3 ) . val ( ) ) , inps . eq ( 4 ) . prop ( 'checked' ) ) ; 
120+     var  destCtx  =  canvas . getContext ( '2d' ) ; 
121+     destCtx . drawImage ( resized ,  0 ,  0 ) ; 
86122  } ) 
87123} 
88124function  cropImage ( img , x , y , w , h , fw , fh ) { 
@@ -92,14 +128,20 @@ function cropImage(img,x,y,w,h,fw,fh){
92128  var  ctx = cv . getContext ( '2d' ) ; 
93129  var  aw = w / fw , ah = h / fh , a = Math . min ( aw , ah ) ; 
94130  ctx . drawImage ( img [ 0 ] , x , y , w , h , 0 , 0 , Math . floor ( w / a ) , Math . floor ( h / a ) ) ; 
131+ //  ctx.drawImage(img[0],x,y,w,h,0,0,fw,fh); 
95132  return  cv ; 
96133} 
97- function  toBW ( canvas ) { 
134+ function  toBW ( canvas , brightness , inverse ) { 
98135  var  ctx  =  canvas . getContext ( "2d" ) ; 
99136  var  imageData  =  ctx . getImageData ( 0 ,  0 ,  canvas . width ,  canvas . height ) ; 
100137  var  data  =  imageData . data ; 
101138    for  ( var  i  =  0 ;  i  <  data . length ;  i  +=  4 )  { 
102-       var  avg  =  ( data [ i ]  +  data [ i  +  1 ]  +  data [ i  +  2 ] )  /  3 ; 
139+       //var avg = (data[i] + data[i + 1] + data[i + 2]) / 3; 
140+       var  lum  =  data [ i ]  *  0.3  +  data [ i + 1 ]  *  0.59  +  data [ i + 2 ]  *  0.11 ; 
141+       if  ( inverse ) 
142+         avg  =  ( lum  <  brightness )  ? 0  : 255 ; 
143+       else 
144+         avg  =  ( lum  <  brightness )  ? 255  : 0 ; 
103145      data [ i ]      =  avg ;  // red 
104146      data [ i  +  1 ]  =  avg ;  // green 
105147      data [ i  +  2 ]  =  avg ;  // blue 
0 commit comments