From f0bc67829fdf8dfbf3e58a22954c9093b80d03cf Mon Sep 17 00:00:00 2001 From: Mikayla George Date: Thu, 16 Dec 2021 03:10:56 -0800 Subject: [PATCH] add images and css --- .gitignore | 1 + drawings.js | 4 +- images/dither_checkerboard.png | Bin 0 -> 4022 bytes images/dither_floyd_steinberg.png | Bin 0 -> 4506 bytes images/dither_input.png | Bin 0 -> 6564 bytes images/dither_mazing.png | Bin 0 -> 4195 bytes images/dither_random_noise.png | Bin 0 -> 7626 bytes images/input_diagonal_gradient.png | Bin 0 -> 4173 bytes images/input_random_noise.png | Bin 0 -> 7646 bytes images/input_solid_black.png | Bin 0 -> 3033 bytes images/input_solid_white.png | Bin 0 -> 3034 bytes index.html | 328 ++++++++++++++++++----------- 12 files changed, 213 insertions(+), 120 deletions(-) create mode 100644 .gitignore create mode 100644 images/dither_checkerboard.png create mode 100644 images/dither_floyd_steinberg.png create mode 100644 images/dither_input.png create mode 100644 images/dither_mazing.png create mode 100644 images/dither_random_noise.png create mode 100644 images/input_diagonal_gradient.png create mode 100644 images/input_random_noise.png create mode 100644 images/input_solid_black.png create mode 100644 images/input_solid_white.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8f8477 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/source_images diff --git a/drawings.js b/drawings.js index 48f87df..388e969 100644 --- a/drawings.js +++ b/drawings.js @@ -80,6 +80,7 @@ const floydSteinberg = grid => { else if (col_idx > grid[0].length - 1) return true } + // getter and setter that doesn't break when OOB const getGrid = (row_idx,col_idx) => { if (outOfBounds(row_idx,col_idx)) return 0 @@ -127,7 +128,7 @@ const ditherPrePass = (grid,{dither}) => { ) ) + ( dither.checkerboard * ( - ( row_idx + col_idx ) % 2 == 0 ? 0.25 : 0.75 + ( row_idx + col_idx ) % 2 == 0 ? 0 : 1 ) ) + ( dither.floydSteinberg * @@ -182,6 +183,7 @@ const posturize = (grid,{base}) => { // compose base image, dither prepass, and posturization const fullGenerate = params => posturize(ditherPrePass(makeBaseImage(params),params),params) + // ditherPrePass(makeBaseImage(params),params) // plant the rectangles onto the grid based on input grid and params const drawScaledImage = (canvas,grid,params) => { diff --git a/images/dither_checkerboard.png b/images/dither_checkerboard.png new file mode 100644 index 0000000000000000000000000000000000000000..e9292596315df0b3f9381833dd275b9a42eb8363 GIT binary patch literal 4022 zcmd5;eNY=^8egit>s6hxIx2Oo@0TA7L%7{4etQ(bn7AV4zmV z>ov1^v-|GzKJWAVp5OC(^N+o|3+~$d;ARMd?kXy@6hqK$Fa)J--t-4B6FHA<0Y86o z7d|0E&>i>6-!$mOmUIZ(IL?-oNoCeu1jW0QB+WY*Wv$B%tRX1ZRO=?GN=AYmjFaUI zida{V0%mE0qEu&9S>0x)f-S5Qn0zB6(1!Bi{sm2wF=8dRoN(}K`=d` zRS{}6y!26k-2}RvD7NG;?FF6;iV8_`6DaESdX-*{k{6sPhT}M@Qln}$0xS^G$4O)@ z!iky79xRMV39MUUc@CC6k`CS@85AJW#S~obq+3p0f(ZbI){<@%Q>x^Y5{5LDv~zoe zs>J3rg)&u)i{T^@*kVarcLgu;Vg*VVd8vtmn*5n>*#^Q1%w-BYg8j!{kAZuES zB|bNU7BeF65hy0F285X@XX7T!0z*o?P{Q+7%Z1vz95QS+%Z0(=zm~Eb&3nbarL18r zq{J8$YLyy8Fg2)JiAqgqbc6;&RM~_|wPhA&}OYL1+1Y-iTp)lnj*@1 z!9{|cSr_SKP&emPz)2(tGhf9EU}F%SCUw5ZY~CyICCk!87D?hbiK`I`caR9F)v6Jk(NGAj)2UQhj803F`sMW& zp7O{nSYA(q^(svkLt_pcAssplVK6O)IB;D#qSdP?iYccx7)CFz-y^V~3(2bA>__fR znLb1zD}uuMmbzyjQ@wOo#li{35F{mcf8m z)f;Eutlzcqk<%9*ho!BJbpILsq4#sQ|1gl&tGx5u!Y>a!WQ)Ic_+z~Cq$mDDFi12V zpBimG5ccI?84pFXoBB?6JpM7Bd8RkLIcMrKs=<&tOqNcU+Twf0?}4Ci8}>X6&KGRM z?GV(s1%{v#QnL2&->ZF&R`k3}+Lu~_`O@2cfA z>Wr=Nx{%_`<(B3glgSjHpU>#@^jwVAbmegqp-k_1``LxM)FIq{r9Jp$OL*q(*}l=P zrm?qYciC(wI~*URQ}hBo8(b)m@2QwRO81cRy66}v_vft~`+@AnU0 zxNzXoP>V)b)z{#0A+it*_WF(;J#jQ4X(t9sY=iqBoqF%V6|J41chh|Qy!~kEaCLCr zHgm`QK*j#@zgDp|0Z5V2$$|9aZGov#xeq_Dw=Wp48DIClDE5xB{afqXKh62Pb^hn; zVguC>_RVetdfa!@^>}qATgCpfg9W1(FGk14#$-JKDin>^<#FI>@dg5c$lP3x5DoNv zHc@kU_>202E31ld-acR-vD*f-2POfbL*9(D36%#b^eoofI4sN5qXIas&Oh*p@7OvA z)vZG4=S5?iQAjY?E)%-DyE`&5fe4lTTRSHcJkRI+fxu8K#$Os5%~_Ao`8LoO>hQli zh6bI%UXB;U)P?Se-6940sM)$w3=T3AAVnMIQ8c*v;19q4nyEml(*Z`_SoMK{REAM BDu@68 literal 0 HcmV?d00001 diff --git a/images/dither_floyd_steinberg.png b/images/dither_floyd_steinberg.png new file mode 100644 index 0000000000000000000000000000000000000000..94de528832bd90b94fcf55bfd0fdc1a9bc12f7ff GIT binary patch literal 4506 zcmd5<4Nwzj8eUuNXst!PIc$5J#O18j8a5k}K(++bKoz`z$B#ff)HS=o7?O?IM1DMp z(;Kx)Tg#nN0SosBlpuJ(#2*lIcWQ%0$=v|~R7e$T2BJiv8UYFSEdpcjuys1uA7&Uf zyYIf=`#$gUJa5>)E^76h7hii3f}lAOYr?Wbyq4Y#GYqvjT=V#3}YKMQ;k!CQ4Y4Td0TX=(mx0sfRW1wn;EA;RGzTrL|#u;~o7 z4o_#RX}^gKVI(cnDl|F;rDic1@hy~ICxStxk6Tb_Cey0vahL#LNII@TP=5~7(pVrN zn~c-wwW(u=6EcKMB~_$aM}t^&GFG#d(oytQ>M5xwAAjWl0IftadB&8rs8o|j(7Ny) zpp9`rri`ZJGBhL-L(-I9D1@ImHs(tyE-Ned^{Ahi}4^s4+9a=-$J ziwIj8mwxoll|`DLwY|3Yy1{kme2Z>vczFHtfIV|Wvy-Lypa0|YBe}0@yi}VN@!M)! z{!}7pnUVKllWPB;t!-Bwd8kMKLDRyXpDRBxw#~SU(AdW?o$2CRX=44qz1>t&?zW0> z`J8ie^O~jQWD;C+E2FY&Cy_hg=C+4=nhb@*Gr*1+UHIH|2zqxO3xZa>2Tg;ZEz@U0 z&|JS25VZT1Y0p8>`I&Pei1qev5R3l5L*<}y>j?ZX4ODu|=b*)C#C%>(DLO2TZT(2E z+AfLDbNAl4dXg_`?r;PL2e&w^Mb?ng&pe{mEc5YB^@6wNIw zgiZhcrO3{;8$^cgptlR{`ef&T!$cJUmox=Pq$w7h%T>pTSwfyK67cr$L0#Hr?4sduipnU z--P#(KN>fNy0bqoGTDqK?>s$C$AWdM4_;^uQTkZ&OL}h8YKl@Ox7Aq7jJ0RZ9P3mk zbO#mgTJIXU9bi0rtf#d+A;;Z2G*r9L*B4;g+n5x}Krb6DyyYk|R63o`2G7Xdb6%!O z*RX{XtX`o1B~+ z-ZT_!O)0t;-}_d_dh4dcP{ur|(zJXnVGFiaWzX_#OUiA(5b~0kh+@cE?zZ>n4qWP~ zx12q)*ypkK$fPaGe1~v{?c^!L-Gqz7$Y9dp>Q<|r-DPO3K5x6wJnOrY&@KC;jZ?4s%1IdN*T zv-VTlVQKS)3*o7fx=#NSl`Z+7GFrO!(*+9_RMo-y(L3(pp}W_`gyfsqfq9X*ko@GGDQC#Gem5- zX08Y^gAAdee}C@#^`)sn-D}JoxrW@>@IP`gN|mkB>`Oym_Qcj_-e1O5W)G)LA;=wd z$p9rF$j=JREqRG;CZJHin#$wHo%imc+&Aw(!VJ+hc9-(x)o^*I-QHGPnKO*&JtYcb zd3kw5a=|ro%V3?^eB5HOjM?P{gpkte+<}{R)TO3sydlM<1 zkXV(zxU1AAO&yggo9weY%r^tTO6afee{}Y}fj}#LyYh%5gLZ%oC+V|$cbGpSX=YPB z8lC@xY_TVr8|*v1>2D_=-0Nm01lAU9K17w6ybFLamm7OEK}UBnT7zB9mV>}`yUX|O z+t)r=P_nc?WU|jMj)Ueay@Sth z6#Pgub$0Dbii&t88#Suc>fXM-$`35v9VzTa?Soh2e-qTO=N75XZkdTm52b)TaNQ$WH^@nfeKxM|n-CuV3 z`5uVx;E(h-A~{JBWh3Q7^GjxJGOt+jm!`osIb(x$KQS=I$klKg9Q}Cm1@9k;tXA{fp||ukBrgE?Z_Q zu}K-D0QOt%UYKVJ9|*R{i<`pw2a|J)8ArL&J5YfAwv4~njVQ8}kymbbiu=x1L}nQ} mZVav+@cmJ&w#N;Q&ZvEu)h}Bl@B&{}p@{IPu*y}N-}w*1;}_fj literal 0 HcmV?d00001 diff --git a/images/dither_input.png b/images/dither_input.png new file mode 100644 index 0000000000000000000000000000000000000000..1476f90d0cc5497cb2294a23eca8dec4c87891a2 GIT binary patch literal 6564 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 NXmB{S=G~M3^1pMcn4JIs literal 0 HcmV?d00001 diff --git a/images/dither_mazing.png b/images/dither_mazing.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d67c382a31468758cbd1b63645062c89544511 GIT binary patch literal 4195 zcmdT`3s4)^6q_LOD~sml32#KmZl4MHzZkIzb_N5z`qL z0r&JYo5^sRXwyW@V0uADoFs}7LTYe^zn_4G!F+#4fY1*X@c2TZFN4d01KFHFHq2we z0))>&xLn4{#RRKqC|oXqSdMqHe09D`RRCmq(;Gpg+d{l!)0^1EMUQ+ z41^Zdvk1z2H9{y(VH%}ct0V~q9T80;GqfTm$aJ{`m3l2KL9M_90AuS>H5>Nh&?Pwy z<=C2?IzyB0TwIQ^@pN2;6Iu$`!fUqb6jDo4Ddb~9uf1Nk0Dx8^SzBYnTvV#HB`9rJ zCMaVCkPWRVsX>jiqj8GN&|r92CP>qpu11Z7XmC_ZYNRBYzS^j$)sz__A#`JejJINy zgq+k-zjE=xLs2a*VsbfLm<4k|*Q6XS!t+OXFpCq2a5&4R5>l>AHf&_-ABb>;>r4S_ ziE#owM)ZwADz$nxz{cnWvXmZ)d$i( zrX%qQ30uV)qw&aO&^GI2N4C{`W}DYm>p5d*wXb7t+TK!lqoV`Mi7U6aE*kHfue%Og zGje3vr(S@dO`CrZG+Z$L%az*?#=P^q#8v%7tU{q^CYubCrHk{kG2!9i&1CNx9ro+82VvKOYu1%Tlo7-Hud*3`9H61Ify+v4>^WN{2>g;zbr|tK)Ssk;J!#BNpl527s zM{Zll^E1VZ5luh#-qJnIKYR8pA{KkmNGvYQITq%o9|6V#dUsTrY^~>fGBPs{HS`lR zm9gf8?$laSNlD3oB{DLSNmj3C?PY6mNPnWNJGG|oC2@6vIjx{{KxZ-mo_r?G=>Y(r zzV~j^$kf!8tJw=ja_zPoMQ>l$sVui!3cn=~%ODT=!~t#m^jT};lNj`Oo6VLwldmjD zwSqRstepXWaO(fx2$i6)rSfq^84}a_{=?Uh3R)4K(5U}SSy@@LT`CjhEH)O4PAvEJ znj%(~k(G7K$Hyl>ApY2~E@RU!nhis37xM!)KGae(3aM+6 zf%B0zNn3T7{hrmE1f0rSK)<-^<0@=Uo%=DVn{yurWzYXLvmw5ysA!AT@pXIQqsife zo}QjttQi!w!_av>&ug@^>>!O>d}3m6NqC;^tB+r7CU;+n#dG3a&qiAG>a8YIceQVG z-krO5dw^RSO&bT$h?XLg$x!TVsWO}QjEiJ4NvCwwflO3&{h!dkcz8g!*bk1g{G;YX z>nC>(U-&{$C>iVt>hPDu3?BO3`hyUB3cWtDIRE1R?jz@k8+i#DbH{kU&W%AJa7Bbg LhE~0E{M3H{R$G_S literal 0 HcmV?d00001 diff --git a/images/dither_random_noise.png b/images/dither_random_noise.png new file mode 100644 index 0000000000000000000000000000000000000000..07485383ba6e0258899cae9a464f7ef37a690752 GIT binary patch literal 7626 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 literal 0 HcmV?d00001 diff --git a/images/input_diagonal_gradient.png b/images/input_diagonal_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2573e040acd2bef98d855024922578affa5ccb GIT binary patch literal 4173 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 Ee}s6wq5uE@ literal 0 HcmV?d00001 diff --git a/images/input_solid_black.png b/images/input_solid_black.png new file mode 100644 index 0000000000000000000000000000000000000000..bfddebaf5f22dd2e03b4acbb43984b889d12f083 GIT binary patch literal 3033 zcmeHH&5zqe6rWI9m4!;6_E2#exfiIg#~-mb9@Q;dCv76(Wwnje<;G+@Nvw@MuI=4q z_e6WCkhpQ8s`?L9LL9hp0CD2L9sUNy3XnK(0Ey>(Si9A3yQ+GOr8wg^zxVy#@AHlI z+ZR^eT|o$4=(L-g2%W(Q)mF}*1Icf{8t=g08)^HK9HBQamcJT$^!PGDXMc~nTg6uJ z5#=)0SSWi!o5U%g5xRC`k}|$63fvQeDDjj(zWZLmQRpdm?LZGwUks!6ekShhuXp+W zHg`ki#&vvcLcu^R3Wg`~D9P!>Q>Jz)oJ%oL@Dx&Pd&*kr5N`z=*q52Ww&tkZsM~ne z)eOg~yY2_r)Qtww8^o|w!=ZJZnkJq<3V6%HKHY5In)`w;PZ<_PN(mW{$J*G^WHum% z>$*fYiD{~UQ1iW{U=uaTuPiJyMb5J*Eh3rV(jx20ox)Qf(pd^|TA5Aqd6}SKWWrKn zXnL8_6d3Xfm+oYvsq>H%F%q#ziX5;;g-wUDkoi!aV7j_K;s8n;1eK3tV~OL+MP9Ua zA&q%Kjz#C)y;P7*k;|Qoi`FiLd8N!IrG6$@A+xTOqeY`O79nHbFB{|H_wGhXD98Ex zhjc`f6~a?Y-859ggsydUlUg>l3{`JXU7tY%8AkoRN*xvMQDLk*aq)83;mC?2)2-oUfNE%o8|b>c9cV7_vYJkN8FpA zMiHJ)3}w9B1W)1R2#8Rbi=$&IaJmd;X2(MTMxQemGgvPB#h7JcZ2;9e&FGPn;?LRc z^P@jq|4xqn$f&+#^z-8KAxj1V$dxE%KBT0fS!>9%U7Ow=qO1iRc(6QH1PmV)g^L7C zXF$*gyIW6y_rL5k*SeF(2fr9Kgx~t%oBQU!Pk(H=?Mr_jJo?H4_P_rhh4()XYc+(- zbFU-x)8)4j!u&&oKKo)RTozJ80GYzW(x8g9&v$GcY69@loV zo1CiNkT`Ne{S#0RoRBz>BL}zwN6v_d6A~xjc|WWKB_*mjuBG*k-~8V9d%sV&w;o(y zdvgsTbiK3L?jdvuBh*;CdIcoE{!DJd-?eP>;{u`A->7~K^u@DV2wnay?(dX4-47_2 ziN-=X5ZW}!0FBU{yVH#ET~XqJ7{;lu{Qk|i3XVfxdE|7BZWf49ym^?5hlg8zez?oM zP`UdazB8p@AQ2_Q(`1|$bm}WJyA;lqSXb~2QttZ7dgT!BbhmLJbAcVLsd8dFxaDc2 zY1y9lE;bF~>V~TmOC?Qe8`L!M;!(g`9!9j+et+Q$zIViWDj?M2AT8NcO^e%03vE&GJkH8krns`m26C_T6^L}6LXy>H(_&F3D40HFnNBpL zN@)fRd5z2V^6|`h$aOImiAc)=u%yOjBU#E~B+oHjU!QUSrR{cWA7{prB(;m8+}MXS z76myIUGxt!q4z`~_i`>a_94vMRW=z7a=}WO_oW;!8@0U*83#et7!SYwC{9B;Dc(7u zBigJKzG50CQHcp%>l-Gu9BL8OaH(O;pq^ob z#=ufrwqvNmwH?)MwOrM0S|YS9FC>gD^*_vG*g`gbX*<1% zj`3__DC5;8_zJH^KtKj_aePJvE|$Sue=-ta^aXP?&N3UpT-WvViU7OvVpsXbvc(6Lw1PmWFg^LtS z=RnZMk8eH)-v7MQUhhwz9sficNBG9kQBVBY`s3@XmnLgpML&H17tsGJe;>p9m$$CG ziqLnrZXksDJ%pZo)@UGPu7s dithered pixel bonanza @@ -30,128 +87,161 @@

dither pattern maker

>

Display settings

- Size - - 25 - -
+ +
+
+ Size + + 25x25 + +
+ +

Image Generation

- Random Noise - - -
- - Diagonal Gradient - - -
- - Solid White - - -
- - Solid Black - - -
+ +
+
+ Random Noise + +
+ +
+ +
+
+ Diagonal Gradient + +
+ +
+ +
+
+ Solid White + +
+ +
+ +
+
+ Solid Black + +
+ +

Dithering Blend

- Input Image: - - -
- - Random Noise: - - -
- - Mazing: - - -
- - Floyd-Steinberg: - - -
- - Checkerboard: - - -
+
+
+ Input Image: + +
+ +
+ +
+
+ Random Noise: + +
+ +
+ +
+
+ Mazing: + +
+ +
+ +
+
+ Floyd-Steinberg: + +
+ +
+ +
+
+ Checkerboard: + +
+ +
Re-generate random noise: