From 8937d69e532c3933cf960155ac20cc47a94f2121 Mon Sep 17 00:00:00 2001
From: s233039 <s233039@student.dtu.dk>
Date: Wed, 15 May 2024 13:35:36 +0200
Subject: [PATCH] Preview CLI

---
 docs/assets/preview/axis1.png             | Bin 0 -> 12802 bytes
 docs/assets/preview/default.png           | Bin 0 -> 25771 bytes
 docs/assets/preview/lowIntensity.png      | Bin 0 -> 7065 bytes
 docs/assets/preview/qimLogo.png           | Bin 0 -> 8149 bytes
 docs/assets/preview/relativeIntensity.png | Bin 0 -> 13008 bytes
 docs/assets/preview/res30.png             | Bin 0 -> 6121 bytes
 docs/cli.md                               |  44 +++
 qim3d/utils/__init__.py                   |   1 +
 qim3d/utils/cli.py                        |  14 +
 qim3d/utils/preview.py                    | 380 ++++++++++++++++++++++
 10 files changed, 439 insertions(+)
 create mode 100644 docs/assets/preview/axis1.png
 create mode 100644 docs/assets/preview/default.png
 create mode 100644 docs/assets/preview/lowIntensity.png
 create mode 100644 docs/assets/preview/qimLogo.png
 create mode 100644 docs/assets/preview/relativeIntensity.png
 create mode 100644 docs/assets/preview/res30.png
 create mode 100644 qim3d/utils/preview.py

diff --git a/docs/assets/preview/axis1.png b/docs/assets/preview/axis1.png
new file mode 100644
index 0000000000000000000000000000000000000000..47d398bdf337513be4407536d804e0311c3f11fc
GIT binary patch
literal 12802
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
HP6<r_@BF>b

literal 0
HcmV?d00001

diff --git a/docs/assets/preview/default.png b/docs/assets/preview/default.png
new file mode 100644
index 0000000000000000000000000000000000000000..fefc0905f558add0c6c744b2e3760d386ef91739
GIT binary patch
literal 25771
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
D89WOd

literal 0
HcmV?d00001

diff --git a/docs/assets/preview/lowIntensity.png b/docs/assets/preview/lowIntensity.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d9f7a78942bc1d028fc6acdd177f288e3e66bb7
GIT binary patch
literal 7065
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
a`;9NIYw^Y;m@qIfFnGH9xvX<aXaWGzqrh+g

literal 0
HcmV?d00001

diff --git a/docs/assets/preview/qimLogo.png b/docs/assets/preview/qimLogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..08be918c6fa9eb4484b945c54b80fc5c17efdea3
GIT binary patch
literal 8149
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
TU$!tXFfe$!`njxgN@xNA#k~P{

literal 0
HcmV?d00001

diff --git a/docs/assets/preview/relativeIntensity.png b/docs/assets/preview/relativeIntensity.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ae5f39bda7152d2ce9551bdb7bb954d0ce3f512
GIT binary patch
literal 13008
zcmeAS@N?(olHy`uVBq!ia0y~yVDe>PVA{{Y#=yW(vf!r|0|Ns~v6E*A2L}g74M$1`
z0|SF(iEBhjaDG}zd16s2Lwa6*ZmMo^a#3n(UU5c#$$RGgb_@&*dLTv4MX8A;nfZAN
zA(^?U4B@FM3I>J>zKN9zMg~SE3Wf$&h9*{~#tM$U3eK*<A*-v`FJWL%VDNNt45^s&
z_HJge%=JpUJRY{+UK3cvFHTaOxoJ^XY?<nO1$nFc3i>fCLsm^Hs?(dE>bc~IEX&6C
z%|G`C%&edAO6{DlPx7|cRl+ZR_&rXz)?T}7{^eOSX1wtG60rJe*Qd{)KL^%TRau=f
zfBWKv#;N)9=DGd+{Q0v6fB3|G_3G;Ci)((>`S;&{S+c0+*FUfO@9*aM+s8H9owl3E
zz;JBJB2I<{4df9Au9W^=^z`Y|Qy({P-u!wN(}iSjZ|}f;mtUHg2sb>lyv)K7;Bb+J
zA>hHSY0rP$JafipioKOpR)(6vkF@mk#WlPBlvh+pJiYw={l|}mQ`p&NFM2skbJl{G
zD3iJK=ez&hlHv7yaYoa{q)I-R3!hp(xOHbo;o|$j3_mi?nJ_Yl1b_&MT~BxBZNL5E
z<K4T*EN0J=+ST8pJ#+s2{!cIY*j_$AdGe&^6!vx3D{7s@JnWw&OzFA(x;`;c@znb_
zZ(M$Eacx}0$u|3`B|`&Kml{I@)7s9?PX0KRD|y?skBf_oYahRC`v1$9(z`XUmdG|;
zj=g>P@%y)LU4L4Y&TYHQcjV<CNxhf9Q&Uq_Ppx0K&TN+d{r;Dq!e-sSd$;!!J3D)z
z-QOCI{`Y_R!XNtxGdM813Ntt~F5F$Mw^w!7OEFf40~Hdx7G+jd?YbY#z;J8=!WCer
zU?Z5XFVD=%(#lKVWVo=UakZbCy82^ZH%5k8W(BU7S9q7_uD|`YrmSpR(VrhbEanM6
zR<D&^w`NU9-}?3I-H-3A{+>6b{_`{6DfK@-Bu@EX|Ns4e*UE%FJC|`XEI4prex{YZ
zeSP}n*z4Ae41Wzih<Yr)Jk!F`vhw%+mz$ij($dsU$;--`ng}Q4=H@Qwv$vc%caFV<
zMaQQD3DQ3nz1*caE1}@du2St&@qgIEgpcQMjSBpCb8~v2oJ7vLOeO}61sO~X8VQx}
zy2QlA7ytS9ug=-{=gmWhoTjYL&SZ$W`}g<v#eYsu*I!&y)qC~aIln3F_nyK-4IFf6
zMB~cV*4FZG#n#r=vn}lG>VDsUsrz;F=FNfoUWxtu{(aW&Q+36qvNf-_C3{-`TUNaL
zN5!-f;rO_?bu#O3&wKbNIb3OO{qoD5pI+9ySlhk+dH4IRyPhvymwNQhotUQ;cYp8A
ztDZD<>eTJ_>({LdOMCT6_0sj|TaGq!&mTMHHpPGG{P35*&F``u`#m@CIbLTnf?^#(
zH1_9jy{nw*es9;gBQ<kgzI>@Mzf7d<b;$LX`_Dalmga2C=oWatd)ej7mo?UByjr^@
zL+j=*)?cm{SxjDvyIy|sBxO&%48wsHt953nsmH!zVJHZ^KmGZy)cpMQMKzU`KWC+X
zDtuM8`2NkCJD<%w@Zs0h^>w08!^6WD{{cBWKkDwE?c2AnuT(RbGbf0NLBpW*=G}nc
z;N)r}E`|qdS8m?CxpVX8&A%EJb#kYrr7imN@nfO0aiR>*Z(mLGygMDAcJJOD`0wiK
z@Ibj8Qlf$rzj*sxJQB)NeX->8v$GoU<!e<9Bx2wh|G=j^)qMQ?i~s!jQ{!wb$*Zlc
z9T<0-MWg)tySp0y-`w1+F@Iaa$A76;kjjcnPj^n9Jo!a~uYUMa>0@TL^S`{?P`3N-
z1s{e6HQv~ZDRvAF_7U@#p{c3h<-Ov|moHyr^!N8)Tmvc%Cr^%?J6&&n>F&E4^Q}OM
zQ~uVYW#X5z*IYWTes=kGi}&x}yMv2I`!{;~_Uq?e+_+&wz|8g4`*ZU0_Wk|&s5s>M
z!K%Exbwz)YxVzrIeY@R${rdIc&tA`4zw52%rR&AF3T<NJ{I|<y{rVdD{pZgI2b)iQ
z?CtG+@#E#=$#IKsefjQP_2<j))ElOMYi%>GyM*tRp9@d>;0%C96lA&={L;=1WO)20
z$-7zTrI|<h`+L2gqNAe&<ud$YS5LJH)eW5kH{!zQr#rVeXWg1;KK0!5O?)pO>(%bN
z#CJUNc$h>=X8Z5-^YctigcU-sUaWu8y=;r_zC|w&UwW>6*Uk0f5sk>$*tg$B8u~-N
z)}|v0)oIKjUh9v(n7S)=9X~(6_VMY{rfD5tohRD*eeL@7?mw56Z~cEZzfSmR{jZnH
z+tQfA!@vKGNte*;F9a1D;F`nX{`BXU`u3EbHfMPJ?Ah7bfpr(AeZF*>;nMDfv*VWe
zzgP3y|6anTR)5x|Y!(q;2K(K$zsvS7FHp_&Zu|1v>7vW}NO*i+`2KWfNYyUWyH_O=
zLjGR1{~J7|{^zIEDfe&P>iXoXKmYE|V)awYt%crzVli?0Hi3+&D&H9WdHU(I7#O%T
zKm^a-PcjTV%H_9fZ``>PvwwMkrmHYR472Oy_NA`D_S<4N+OWgwrAtqDZpp2^eCcxG
z?%lh2&pt`dZ2wfYTlQ)6+OR3_%XSCu%d;!p&SZY~(871`*Gl{UzgHOi{l}HNRn;G-
zy*_&M=&3VDRhu_&-hArJvuDq4&)3iU8aRD@bv!7&^yTO0hxeU7b7s%q%G}(wM#Z8p
zb<g=ee?4!p)yv=JZ*R=qCg5Q||8n00YisM?XP5Vz?|o|f_mBU6`OEJYgNp<`_ht3@
zR`W}Ku7C9r5z-C2pRd!1-Iwz#>wouYVFriy8nf1|cqi3c7ihxhV61Z<RwHh(VeeV{
zW!hiI=sxy!(~W%@7+6Jc5nE&u7RboSx&17;UeI=Wvbw+4ae14Hg0sdyZ}v)?FRIza
z{rlCctSSD_i+_K6tFeFYUfHMoe0)-8m%snMcI{e?{Tnw5KK=h?xxMSp!eUS%FyAiz
z^y$-q|3Gb#a3rTc-6>dHR3!BDGH+dffB)h?Z{FlgVV4lg&dv_Bi;c_KmHhWfO4+?5
zZ6CUpO`I&|>nk6Bk)>x<^!7a0pY!W}X`a&8)ph;(<@3(FdG3|2lR;Ib61ak#_B`Xt
zxpRK|mopd$)ct)O@BZ`p`gn5_VY_LB{4G%oD$VTPewe%MrM-<!&!^|lp9jt>QjNBo
zQo^xs$K=1?zLlju`|@Q=QBBsWU&^c2O+9+_=as+fx}(-!TRL;s<LNVI&+h)j&CMNX
zS8Km+%^H`VU;fT0TcTIlr|0#2^VY4RPxJ5ZlYM%58iW5lo6b*{FJFd)%JTW=S8jP+
zaf@;9lBH*lUibM`_p)sFeu-juh63j*0z}^flUF}}?6@Dyz;@-+r=ltAUkk)9zx>i<
zmcMn=@=JVAU-I#1%DD>jdT$T)uor23I5qF}q&)4Qt-NmfpMAZ%mzCTWat%KBNe0>~
zVa!%^xfFX$G8fcp+4oLr+H(K-VSV)<kBWbs!{&L{wDx7*>(Ve#HS+9P+7$ok?dQ&&
zTU7Jwm!wI2-Oto1@ljD-pU%&>@Bg%Nclmp_pNkhS)`<UJ<<Y-+`*!iC)l0K}UYe-}
zYhq1%-q5%el#VV(A7Ib@nV*)n?Be6|XV02e)ku_fsU;-51+~n~^Y59MOn!Z_<f4ha
zz5LV5(-aL}p{4NS{qpWVtG~YkHAy5akg6RShlN{=3)frKGdDY4WC_r?`|a_ywb8t1
zSzfT8E{0_Wo%6gqK)L;L-~N}T;xB71-Cc8;@50(J?NjBu?`qiRS<UsE;y?fX*|TRg
z>}_rDX4t(wF!!0bnAoB}>GNyFp1!{KzVz|S&(@YV-|SyKecCj=voU-6bpGzKvbXR5
z6dZgrJjrVQr1Q`3-o3lsetJ%IapCHPyB^2eJac{dd*jRVpAR2CtT8_>dB(nftK;m?
zfts=4w(JHQc7~okaXAiaGng3M?!A2Za%z7fqOg8y$>0`rOGshw)4BJ&q7|0tI#eA*
z3)ubp@4weHaJ$s^>C5$xA3tvW@8>FPuz`<{@0Ts>F%SE76CXbQy6An-DMZwtE<Uhz
z<?Y<P=Ro=V|L^<%<(>w|*Z(bDe7yeatI(%Ee*LN{nX@bUxvqWTTr)GXU$(9DkkabY
zos7>*ta$pw_2XQAw)4xInFzBv-YTrg&tJcAW(<G%X02Ilale+?SX*ajs2$LVTYT{N
z?Afzle-~LdH8%|$p@AUZZ?GvpD<&>3ZToL+^!7!d7Q+<(@`d|qf0s?UfAePNCxa9F
ze!ttT@&Ek)Kj%Ra$%-iPztmK&yPN0!GjF@})AQ%gFSgmcb<373?=|-%XK7V)&Yw5W
z%tTni_T_KwzcqfJU*0|P`}gm_x;rwmvR|vYnAc`GC%6hveERgM#{9h56TN;%XwF)2
z=gXIpDgM#(mdt<txU9SWa$kS{Z`;<!u&-6yY>;b@*4EY+4ZiumC(b+fw!|vXE>_QH
zy7J}Y#&@6YeOXi0>wGIovG(tt%Fk-2mY-jr%WSvi<<n1Z-@es|FX#2XyXn*aKj;60
zo95wt%XO{t?(7hJDsNK}V7YJW)=<lTx9|Tmv#R^`b8?(>$n^Eus+Y31>e;4Mc^){b
z`eV}m?~m?yJuBX*UAAja=%oD>p3b}8o_c+Kz4r0>cC}JZUtig~|JA+azV8Dj*3J9=
zs7MeIT0W+G=ddwc$o{+IcmAtQrmw%uQebFU7Wy?XYZj<bh4g~JB`boky}v;`A>?Z5
zGq!bk5@rHnCX6DhZu7D1uyPe<=;^$C`SP*v$xHT&_%d8zzMB_*(d3bcukthV{Xc!D
z><2~Qd{8<0(p2I9NBRGPPZzq}efMnj>eW*puaDciO6LEQ$^KPl%i}7(y@`DK<L~e9
z+Q<3%`4>OFF3Rxv^XH3&$6UAHe*5yHnVH$5KbM#LSO5BbfBW9OcVB#LZ`}QyVF7#8
z+OYl09S+aQWNMJB`0o?E`f89zuY~Jm(b#Pd4QFoMx>e)<v$L~7Etl;(cS=6J{PYbd
zuKhRP)1MHv_L@VzyNs-?Y1N;)oE5iCTrZ0*&HlakhtjL1v(59}e!k!Ld)>mB2d*x4
z4Vd-+%Vqz?HZfO9E|yeP-Fory_d!#5mHKO+&Gt>3gq~iGwz8h<HzohpuU}PD_Lskp
z1GRd=?YYwJ^Oz5$qPF8+zI+)cFI1HV?pVpln3xDNwE3RzUiQVCbKPZy?>>wP8xSoc
z15?YN4|lD6C$)6x(xvl!9&Eb*e_x6G{4YONmPj|>-k$IN)4Kd!NZ<8b^GzEz6l5;b
zi%%*nG(5Gx?yuFU<)2sHZr$s*zFe{X{=Iu~Q~cM@%&Pj=tX5lhx$k%B?i1H*_x=5F
zn1AYH^SnDNWd47i|3Aj^-|P7QyNdqU|Nm^SeSH7VXR}Xz3|}AT`gs4}xB1$~U*FkP
zy1Ho3y356PpF8iqyG|y5SF6v-??;cm@7TO~v-juUzklb~>t!YuRaE@=_T0T+E_T-b
z74N=AK7V?8df>iw$`yB?2i^T#`q5Cb6jAnp3qbtDi=S<K59i%6lbJVve*TvqrLwKB
zZEAmQSvZrSXIuB(<C$%XUfOQny!r3ELtDMJ>#oe+9j|`ZjIE)6a-H2|=^cwQv$9r|
z&0o~nS(CrgvHa$JZU&yVM(tTqYp+F!3a$-X{n59Tk?mr;*(YD~?6%hi6I?I1FFBq5
zSIcAC^y%G2s=EvLC;k5Z-u>sUyBA*nc~`!_`%~%ei`Rd?Tt0u1&ErgP7c4b(X;Dpf
z_UfWN@4iNEzy0^tt*ECz;{Sb`e(K|{Lyums-@i@<UaCI*ar0*6(~9+H&YlhJn?Gj`
zPwB-eakGCO=C=>&+h6f<5&Pzq<pl)-PrrZvE<Nky2Z<evR^ER5t(xn4)}4QG4fQK_
zvmJk~)SUI8YuWend*;lazyC9v)HY+|>6QQAzbxBrXV9?m!po9hwyYgIF&Dqo9W1D;
z`*-f>{nF*d?N?Ll_4iKQ=1}qTQ>wEuW5Nxdn2RjFmzWqE`k!voMO4%enC<?4xvUXi
zo?S8b(lwF)8#Zqie#-bl7Ezo;%xjkOicVT0dztZtysPk+3xEF9ObIt(<l#ruw0g1g
zX3w0tQfB?_SIJpg(I2bp-*25fc`|>Va#2NvgslDD<GQhNGw04-E3^JKZ&lH!yH;Q2
zPaCgZy;@jU*xtTQT>fy`?%2vXyPiLNwC<Jo^t!xzdm?A94=&fPIeD-C|Bq-px4Vxc
z(?LUE*KOyOUYdLD@?OEqHFrP9soy;c8V5PGy#M@yx2tEIORuipT~w2pxUlHY$H&K~
zJ}!Mf(f;pC|EZ7X*Z-?5ne+Vo{P4d2ulN7Ue)^-|{$GUUylr<XK0I)o;=f=2lJ2s&
z{dKZW>wi3K*ZBY3{=em^>wD!ub<(MiyLfxe&CIlpUw(gl*ZY-;AOC&NTpwC%XAN(W
zfQP~G6Avzxt$EqDD6{>#WAOFHt$w!-&f@pB-gJLQ;o^le84m2$TU&7M+_`nha?HxP
zm;Li~_4M3+mPiXR{D_$L9NzW$&gvoX>+btH@u!!wue~bkPTwLcBNNi6udg2t>5<&u
zS-iaHPrH2G3Yqt1yQllVYx*+lvcLUblT)7)@7I2hopS%ijf@Pn$1C6cjY!YWe=nYl
z$eu5Le!2r1shdA1XIq}PfBg2_Z#Cxs+xzmRW83MwyUQ2XRBeAYS>1n8jaF=*jg3uC
zh8oY}>+9p)f9~A5Q)B+N1C^kGr~7yA^ng3J`!ZiXHhz<qmL_HU@5`4j`p2r`OqRwo
z`HK63TH$q|0lMtK1FqlS-|zpFdGTV&#VK{2nzMFj=vrM8Q_kd`vn%`ft0k@%7Kr*j
zzNWO|<)W3Z<R>CRBE!;Q@ul2AtGRxl5_o>?x5z2^RXY<iGc`}WfA`L<^4IJ7|KIBu
z|2f>wFFlKshYgXQ!F@<H!sqRqH#G(m%1-!gSM<y`^xy89xiu<qUsm{I{*|}y?pb&F
zt-t->5X-plHdkc#ue)3syYF4)%GWER%I8dqJ+J>yH}m-SEv^U8&Ng3M6B_-8-_tr}
z`RB;k*xpb6^X+;+ft$^lryI9CF1mHFyuRN4)biU>OXsVvEcv%SZf{nGn!UIE{L4R=
z>#APLU3y7Y?$Ytk7Z<zt%GuZ2%gM@y_Fb>_U)q0ufv5fd%h!unt+GSvb72|RJrJ^A
zo#Fb+Z*Ol0)+Hx{($?X3A0Hq8JCEu58AMBRy59M@bLP0P`&c_HpY@JoUYSnXmbGiw
zy8cx6pJ!qs{A1~s<nOPquU`yl3jf@&CE2$5`K3iKzkK;(^~}&f#5ZP2UN_VAmmfYD
zoXXG3GcytPTH+dfSzYnOPJuZK!?v5pEWa$dyGgzwO>>q+R%trhTsHOv*F}7JSMI*{
z;8?G;t!3Tat;V26C^RST+qduD<ewil+y8mUANX&wzg_32mwGQ>nuh)V_x``!)0b;^
z-F^L9M_=FEWb*vK-|PREPw~$`2=0}<G+hho=79&T_GP|&-FR<RRc(|3D}%-ZA7SUU
z@7|sJ{P}bCJWhtieiy&Y`w}(d=g*&QX+|^n`1lspte>X*8qz)}oUA9Fm!EHLBHVCq
z*1UQ9J{gMmzW4kc)Ej+qiHBrv=EX15_y1YCa3;f-YoMO(`x2}D62-p4u<q6A;^cRr
zy6<1N{=N)Q&dA^QQ|(m!|G(b@|GlsOUp<9AV-ljjs&oG0iY=~=yYKdWdR+GX(T<l#
z@9N1X)jLVVz5MQ~uQ4klWEXe!FV&S9Qn@c*E9y3h_!{h4wrt)07R2C2g4SKrS>;!A
zl{fC#5n&lu-s^w&2e^Is{?5)|%X#mN?qzLV^yf)RSo(TUyp~AM{_=Hp-s?&4l<dvT
z#h+e2{`}h7=)iyf{{9a9ceGnP@Zb9Szu8m#<Lxu;rtYh|bUpoYwZgL7H<o<%EN8d@
z%G57^tNz{NwSJ|~|9f9PHSgWKSHu3zt96#Ee%I+38XJH9_Wa9d#oE6i_)}*?--GKq
zdtFPbs&*}$Y0$Ip&!^KG^Y1b7iSGq9qVMl62lXlXLE{eV7ytQzWY$y57mJsf%dC4X
z6R-Z3<6MEK^{nNxQ!e*i_dWmo$rF`Rhf_s-FSvvH>i^!n(K)r;Rd}(kt`cY-0yGdk
zW&Q26#o@E=9c%lTjMUlM*>+{_vbd<IS0_Kl@2iQloHwt|KU!fAs7dwz_Wr-oQ{+ub
zx5unsyEgW-&${FL|D4|M^7G5rKil{J)jh?`BZMeaBIYd)1n2dacN1Ugo&b-eez^uJ
zH2-|RUw{9C4?|Ixn$*`nKR;{Czo#_kp3vW`;qk7ORoOST-()z3G&?cvxrFvhQ=|EH
zzcQVT7alp>&cC>3`|V!vu&kU!KBBM&j{wb_Ia6c4-hWwHS=Y*h4VtqWHcs8PCcxxi
z#b$Uf=D?>rrnhh3?*8<$$N@AK-rn90Di@Sbfm22L`FXCO;S~3uad!{>`|<JdsgGM+
z4}yjp;^X7{Au}AY>%6RYEI%Fk@(*|n_Se5#;MDMV^1r<=KL#H^e!N$1{=Zps&YYXQ
z<mb_&M>Y0u+4ALFy}Z2q{?Bu-<!!(Jv&U=uMJr3o&QHI8|0XyJGL2a|EjwHLl)jFR
ziHR`V!BeNaruc6ct^D;Ra|-*5>06Hai6RHPba7_;C(u~SMvGX#Mf)%HJ=>mtKQBX#
z;cT!;@6M9jZJRf5)|j7{{qd-Hyi4V;?9x)xQ=mF>;Y<b-|BEaPU+(@E&stvX9LMe|
z%y6N+IYMQx|3#ArtI8t(O(>cE%keX)8i5Rm*Hu?rpQ`_QH9XMn>!YLHr#|j3e;?L&
z{jQO<z5V^omb{bh|Nr+Ll8u~=8Mmw`{4T@b0P2@D?91L775?k~`sPKPb`O4jejfPm
zvcG+9hT4=B(bv{Y*1MjUm*@5~<krN$FJ7!zIP<_)Z+&A6JG;CLwXY(+9~euo%NWkM
zv`AC8Y2V*(w>9Q_t@jKuF+Atz=eO=}`7Xqm(o@S93*GzWT%mpRSszZS&v*G*QdwSJ
zZhngS`e{VrKkYd~+m$OJ-vsC7?Kqp^9UZge()H&HR_?OS-|=6m!O+asR`#i=FQ_MU
z<;%y}VPESIrOts*cRD<8pIZL&@87?mn7;Dj<K>_8LDPA2=g##uo?rXz=I#0Z{{Gs=
zrMFjKDQ%cHXU)IwK6iEBS65e0eSG@#>HK=Vo%<B-9!mfZ!9RGgpy<!RX7-C8U(21h
zdRY{@>fQUblh36mCo7-I&&_rHS@M1zXdvbO+p@)fc6iGFZ*6VWn7{AdrKg*}{CHbt
zed>Cx-SygeORVPlJ*~L=-S6t_o5<eG2-&qTY1bb{hU=~uT^5V@GW2jE8m&6#8JSnF
z3w54*ykFkjM3@1Tth&GrgNS*_3zo?4yBxdaa^K@GVYdqRth;RKV6QPtLL;-gY0KLB
z^|wBLE)?-SV1S&@WOydty?gi6$EQ!9X3sm>e)a9Sx{8V$FW&!sHamY&&92kGzu&Ky
zf7*EPVs~~FV#*+)l5fF<z180r)l_}I51PSA-?60p_p(d8=hH!RsGu4mJv}|JPC{cA
z1J~XC_4bfy&HaC#>IcqyI7v(s)S9x>opq@u%H(Qnv*j7^hzq!rwZVqnKmlCB{(o|E
zvc~*vJ`tc%yu~|Yn8gtjG6z1%9GKzp{+`s)=wt1kw>Hjura6n@Sj(c!9ZPf>Gv*<N
z45mGo$eQc7{Q2=cm7mi}{#?F%dAq&8U)X=^Cy&-XjIa54bm{T+((A43?p9omS{pVc
zJ|d#yQ~A3)ou6KsD!hDb1|H+fH4Y04TU2xTcEX;Dk4mSOzdzpG+^k`rp|`KjEADpb
z`t6`m_m7jFe}9y11nRs#e))N}-uq>;U%r3;4k-wcrb^HzS|Hq~3<eu6^+8Ht{rG)7
zpAJ+Yk7ZdV<ml?_f3M~`AP{K6n5=zw8;e9fqFEU+FL}k(H#&TKKYhI(59$WKer;3t
z$KsUv+jn<&PkpQ(w`a$*nFbtXWo3*096adgZ2VFllx(;(W;q4M?qOgMk^!v+U|`^i
zn8z$3@Ez2)eOYw!+qW{v1c$*Z5nl#oCEZz<7NsR8FTVKr@CuX^#9(U(3MTiD(@N~_
zfjaW}Tcdc-E}4hia4-y5wtV?-Th@k!pkay(Iagukw6wHk_k$TEyyp6;pPD~sj)}?S
zi>XM}oTU<I(roU#Py6=lk%5d^+y8#ES>yk4`+tU~{{Q>FzyA}zoXrXu(1^y<A8+2|
zJgvC<c$!^&v)bOJ7JHx8W@-KA@c9hNZ}aER|NiHPe*C^YCZEC8#n-Q2PkqeW9&H)7
z-PikWnf~h4tEZ=V)xB5Pal<Y#GjpX;@b@|!8=F5b?pN2;)V%!oddca^Oz#HJ`0@N#
z$6qJzun%NpSl5ZAAqyEFpT^9<tdzU(<D;Y9ZE1%rDnNaV?PsTgLc|q3<)L%lk$>&l
zwO^~bOf>EW++w>D<9aL5`t1ULzl$ukOERQ#OK;z}GIRFq><qP@=4IOz6_KXKo?0F|
zCIA1&agG1&_J0;GocZTX`2Js^Q{v;|@-oyM*1viCHnea3x^;1%eX6oSrD%UrHxo3z
z!Ev0tV(t3%->bP8dN^H$oqaE|94JLDDrJ~e_p-_}tm_837BWGjb6(KXde6D@=RqaT
zj<_y0rOb<4Hf*?X!H3~N6=E<bp)&8xR#5jVZgI)$Yil+B-%OwH`g8rhUs|W^Ykq7f
z`t$j`{d$@CbJqMTKYDj}x%Tn&v^1^b&!0WhI)3^1<~+N<mq6nJt>sJBKmYR41~g0h
za@~jgdwV(|JrYPy@ZP<3GWYM?StDa_XSYsf{;XC1R^7aDqvM%z#<}z77uWpy!?*kL
z<;!*c3!k&S7M5U0aL@!zzeUVrUZCz)XvwA*WWsnsxJ%7#E^-->(D4Q|xSzNE_6481
zZCkcndGRs0bo+_xl3RW<H=ji=oF%f%^Y6X+E^_SF#fyQU>B7Ty^$)5*-G#1Y|5n{L
zTO1B5M*O$CT7udRrMDXy9v@U^c%QNT_Q!v*3<i86zI&33ih?e(Fo=ryesS65^X;g3
zd`MsY&!^M(&hT4%-u}PMsr!4Yx2x~p{_fVy*4EZ}GV>pP`ttJfzCZWC^(162Rl@Jx
zJZ5lTLH^3yGWB!k&;PdNWq4ujDlC8HWl7GVn+v{dEd72hqZ*X*>i_;Kbv9;P^@F9&
z&dS=l`%~Ali_`L$H*ei~^@2}>7Gf2|gBW{<g=f#6t@CGmp^Qi};OYg9$gnhccI)l8
z+w;Z6#Oglo_xJVnJ#+T#-oNjE{``6Bv5uZzSRbgxQdE<fxw7cbqiss_Yd(3VE_-58
z3ZB5fcrkE_y`^R5mmi>+jpetulvvHxu+R7{R0f*l09ECnvhz>B{XdDP|G#bD@A`9>
z7{~p(-?>kJ96adw^vAJdZci)jzD@@XZrQvo;6Ho}5lM&vVv<<Ff9EkU$UncGzrXjB
zw6t_!U4Fj)slzK!%HbD_r|ZW<)-lyrRY^SsO&Nk)y1vz*0h#)Le=4W=PhWlM@&2l>
zTBn$=dtYR!ol@ty%r#)v{rmU(KlzILg8l1yxm#R+QB9P|(&PT?Et%F$M^20q+Wm62
zU7y~T?Or(ZPfpRL{n1q~_y2pnf6<>qhnzqQF(&%wAjZNZvaGGG1MBMQ_AQ*r04l0^
zOkIT;t{;U@q%>YTa^y(D+vWpXSH0e`XU`rP+2_yB&Yt=h6d@&Z^!NWU0wp-}Q~tiG
z+LtoD8$fMOdt+nar`xx0UtFVg*DbZYeEY(ge{^d1f#(7)_q|-X<?wfK)XcZ5jRMUJ
zh{~$JE#Z57ilj&|d$Tk!ll?V#hGxs+&(G)A%RQa_?J&Q+%g?P_w`$BUo8f2Ov|M(_
z>}mh@et&nj`xAJ+^5yIOFZ<pfxC-iS{!*QgH@mQ;MC2*^+Kj3%F9N6J@5=D%zEG$=
zYo2Yj7-&X#(I3#7o&4>$K}$mr&8R40Vd1-V{!RZtLnd{Vm6oU0uUX^rGkSZTY1N-R
z^Xi?;`_JFJ89Bv&dibTgFVxjH*NZPbUHtM>hF0yL>C>hyssZ&%UVbXvWwRYLqgq~G
zzPRSsFGi%LL7)Xyd1;_IL{QyURl|^A!5e$g#M=7yi;tqd3=X0Q$Nbu7GyR?t55ooi
zbD%jVa5D%Sk>Ts(lX81sd{R}_uA-W{x_wnl5A~j9?tAzBnrC?~IDx&?`*b(YfBwAe
z?He`-JiVM-bn9)|6#wUwtw0mWFF((Ib{<qnf*kMbegFOB$v5{iU#`)rwYhx09n_}b
zkLg8}`rwKRjac@}mT`w4cx>pU?t9S689BX6P7G|b5!%}FD)Y+9w%re|IDRGMo4_*J
z`u5n%vKMB*`(T?f>z&2CGJ*W4%hqg5eqLE%JMX~No|=nSN+t$v&-I!6#XJAT(*F8g
zZ;$K{^?hk(zcTUuw&gFCG)&+0tAEf#gjZW$C7<3caDUD;V`YimwETv^t)NE2<)>f2
zd@csnc}P?IpmiX#;`BV1mLHat2e+9eWQ>iC|IRx!b;)OYOUs`}BkpTYbF3D+^iyLN
zg9Ll?HFd+O=k~A4*aYv6E_i>snBl-z?`Wn6pfy#3pruod6XWN3zi;z4@9|x#D>mz1
zfdqqw@h8{ds_uv2HrCI`s3V%Q7!nK+%YrU|mPfucdo5nB85a|?$K?ONqN{J-ys^Ii
zch20odoP#%zPGnp-gdr_ySsbuv&*s5Kt*89<?AVo9||wMUwrc9n>}u~oD}xfsLu7j
z3|hccWA%U4`^yKbSQr@CaITm<aH5>W|Lpnm?mxFYWnd^M1;trie*XJY`!6GMtMhi7
z>3IpW^CoaJ1h|40M<zVzUUu^2$%=XzhK4xlu0@#_%s5#Xj-5Xs?%TXBFZ|`*yLV50
z1UGyC{{1`e31fo5ojsMtkU_P{_X@e#K`Zy>W?I?X&$qC)Uj6s}?YG}d&#^H)NM{Z=
zi7hLi(|w5X!Sq@G>U_%2c$__Z*7c{~a^a`TmoHym^QTdJ7DGc!l!>goy!%g3*XjP-
zGHKhoyIT*JURty=YqrUCcrF3WODDg$wl@0jyh9gI#$6b8uz_Z~-~Ieq>1_NkS#uV{
z1F17-&ba(s6@BleJ|ZoF3WCVf=e(C>Z_8xA&@Jol9kp)#nl&|FK6)>a4gLP@+oC_$
zu7xc=?tlA2|Lm~US6_U*+_&>(&85f8PcMB>{#CnW%NCKR*RNe$RI@8)MqcqGJ^gue
z=D7T9Zf-9BS6x;0Yp&FjH*em|U3=53Z~y-N|Gzz7_53;_+(DIimEPVM_1Jl@!F_qq
zva!GOoX#URs`wa=U3l~;Y0C9Q;7Sg*zJwuxVd?famu=2-Fz_rWnJqkPc?J_h+qvJa
zsh6u;{d_cLF*GP%$=kmEZ+TzM#Vy;nhg-&Num18RW%Ko8*Y7^6EKGm8`U&HU^}F6r
zk9#`X&Ts#fv-{sw?~%V_%gzvx@Z`J+Bg5k7o6=_A&D;KbfAB?<q)Vpv3SWPib+30)
zT*QoLm(9N#ykX)ikp1<saz%!e;mdWG9)DAvBj%eaI7<vNSbk@oeuLwqSx5^k5;}DB
z_1%BYojbQJjme-6G4GgA*|#vw`82=x`(-w^wz(N<42S(M9tj9Gsg3ycLt_@hD@1sJ
zmYRX8sQQo7UQC@j)%&yfbpBV<g!JxBi@m;ZXP(X59Whr8tBQ(>lJfHM9=&++LR@zK
zYq|MHj~?A_FE1w-_p4g}nZ8$f^SoK7;+S4;(=IM94z!!=U-f6p;qtqW@92Z3;q7Ac
zysc*~|D2hmukm7fYisMNkGuT-i`(D#y48N>+_|_}J1g!c?UK3w#k4=ub_00Y_w}21
z@5IvQW@a6*-zQPy$Z+5Vwi29Ju@l>-$SZ;eAGEc#Z7u6|Ntf)u^7c}!`c2*{0YrbA
zonOucH1_TCv*cgDynWxNm9Q-7R<CdHqw1@rfyaFH<Y*JqmABvW`CepUm;!F;ADF48
z1StZyM#aU+y?T89+&Q<Oj~_n<Mav%%Uzcako-O)w@}#G;@lLtDyN<05KkmO?b2fPK
zvS|#%<0J6K1>@;ro+;Aic`iSft><KFs4qYs*^x5M)8%Tr`{hf?l<P-CCDgmrq^5r3
zT(tj^Qusxd9$`c#{I$<!`-Tl4zC8!e(yCsMiFuP1vz@zo?v}?zpmD^xe#<XD-X679
zW4>4ae7*BaWj9@Zx&%BGzGZRQuOCa+w|C3l<mcztKkM)N_kaG!Nj0AA-}mm_>up^6
ze)pvR@h_%N`u_gt^|IY}`}*#?bWiE_e)6)Ya#!-<g9ja__}kyVbiVz|=WXvkuKYc3
zt<^q6RrYJ24SRTD;ZIJ6Sx=<f7cS!$L2g(vo-Sr^INzJp4H_<kF7u0+CtZ+vJdEMk
z<&Pf=_b)g2B;w1gm)m{+i<uS!&$2J_H(!2leJ>93Iiw#5s`}r}+OuodukMX`+pRBV
zZN2v|eqH>o>hf9OX@b&A*WK^FyIu<F+t@H%fBfOYhf~K9fefnKj-9;->WMHg)Udc-
zHoaWV$<PK~hXz?Pp}gN_`nydvWo2SdFZbPL2vFMV3TZ3;(fMm9>v|4eluG=3YAKQO
z^6r$$lmE?SzM$Ww_G0muSvzjtyxEq<bRhN5W>JO(2RuZ4|KDi2nzon0AsAG0-ZXnx
zyKTn~iKn;UmN^^$v;Yn3?7Mw--n?b&D_3g!fER5pU%q_tV|`G*-*rEF`Q?``KUc2I
zVYRNUyL|omwQFHh{PP9<w*Opt`u)3iVSUTjr|<AneSf^QwROAw^7-3eeh;tuV=}+4
z?j5Lqw(M%{xi4N<pa1j#6&)F~!2R#t&l|R1>igkfS$?|i1~}9~Yb!rYTf{kQamKF=
zTQXi9KO2ucSR!5U`}gl&Is3gw=ijUP`YLpaf3yX|7w^lujK7dpEje$unf{K;-roNH
z1)m4gFZJDG;OSqeJ?oCpSq14fJ7tC%8Bi=j`p2Lq&yA(K&zY~yvwQjOdg<|<JCuL8
z?tN9V8??3qyv%vS`&V~Mj^7E~vs6MtzjSTwDn0fhq`b0IyJ&kzKJVeS-or;;3%{7U
z<>`5iAd}dM;(_@~<3AM_7xSJ?G0~XS5cd(XNVWsy^#dpL&oABHvwqDQ6BA(ujp^G~
z%$#*<-=)jfjKHhTT)-9ilj+YNEZTK$ed!hxh6nN@zCBYx4ZZz4cHFq&!ysXX2$(JJ
p?(V++_PYuL1KV6g7Wij>;mukFhx02ZGcYhPc)I$ztaD0e0s#H9U%CJQ

literal 0
HcmV?d00001

diff --git a/docs/assets/preview/res30.png b/docs/assets/preview/res30.png
new file mode 100644
index 0000000000000000000000000000000000000000..02090f44b8eab20b2607490bec34dedb56828676
GIT binary patch
literal 6121
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
Y();EAE!;Dmfq{X+)78&qol`;+00+7PN&o-=

literal 0
HcmV?d00001

diff --git a/docs/cli.md b/docs/cli.md
index c45d7036..4b0ed8a8 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -146,3 +146,47 @@ Or an specific path for destination can be used. We can also choose to not open
 
     This writes to disk the `my_plot.html` file.
 
+## File preview
+Command line interface, which allows users to preview 3D structers or 2D images directly in command line.
+###  `qim3d preview <filename>`
+| Arguments | Description |
+| --------- | ----------- |
+| `--axis` | Specifies from which axis the slice will be taken. If the object is 2D image, then this is ignored. Defaults to 0.|
+| `--slice` | Specifies which slice will be displayed. If the number exceeds number of slices, the last one is taken. Defaults to the middle slice.|
+| `--resolution` | How many characters will be used to display the image in command line. Defaults to 80.|
+| `--absolute_values` |If values are low the image might be just black square. By default maximum value is set to 255. This flag turns this behaviour off.|
+
+!!! Example
+    ```
+    qim3d preview blobs_256x256x256.tif 
+    ```
+
+    ![CLI k3d](assets/preview/default.png){ width="512" }
+
+!!! Example
+    ```
+    qim3d preview blobs_256x256x256.tif --resolution 30
+    ```
+
+    ![CLI k3d](assets/preview/res30.png){ width="512" }
+
+!!! Example
+    ```
+    qim3d preview blobs_256x256x256.tif --resolution 50 --axis 1
+    ```
+
+    ![CLI k3d](assets/preview/axis1.png){ width="512" }
+
+!!! Example
+    ```
+    qim3d preview blobs_256x256x256.tif --resolution 50 --axis 2 --slice 0
+    ```
+
+    ![CLI k3d](assets/preview/relativeIntensity.png){ width="512" }
+
+!!! Example
+    ```
+    qim3d preview qim_logo.png --resolution 40
+    ```
+
+    ![CLI k3d](assets/preview/qimLogo.png){ width="512" }
diff --git a/qim3d/utils/__init__.py b/qim3d/utils/__init__.py
index 34597945..5b4866e2 100644
--- a/qim3d/utils/__init__.py
+++ b/qim3d/utils/__init__.py
@@ -5,3 +5,4 @@ from .data import Dataset, prepare_dataloaders, prepare_datasets
 from .img import overlay_rgb_images
 from .models import inference, model_summary, train_model
 from .system import Memory
+from .preview import image_preview
diff --git a/qim3d/utils/cli.py b/qim3d/utils/cli.py
index 37336e8c..6ec221fa 100644
--- a/qim3d/utils/cli.py
+++ b/qim3d/utils/cli.py
@@ -3,6 +3,8 @@ import webbrowser
 
 import qim3d
 from qim3d.gui import annotation_tool, data_explorer, iso3d, local_thickness
+from qim3d.io.loading import DataLoader
+from qim3d.utils import image_preview
 
 
 def main():
@@ -26,6 +28,14 @@ def main():
     viz_parser.add_argument('--destination', default='k3d.html', help='Path to save html file.')
     viz_parser.add_argument('--no-browser', action='store_true', help='Do not launch browser.')
 
+    # Preview
+    preview_parser = subparsers.add_parser('preview', help= 'Preview of the image in CLI')
+    preview_parser.add_argument('filename',type = str, metavar = 'FILENAME', help = 'Path to image that will be displayed')
+    preview_parser.add_argument('--slice',type = int, metavar ='S', default = None, help = 'Specifies which slice of the image will be displayed.\nDefaults to middle slice. If number exceeds number of slices, last slice will be displayed.' )
+    preview_parser.add_argument('--axis', type = int, metavar = 'AX', default=0, help = 'Specifies from which axis will be the slice taken. Defaults to 0.')
+    preview_parser.add_argument('--resolution',type = int, metavar = 'RES', default = 80, help = 'Resolution of displayed image. Defaults to 80.')
+    preview_parser.add_argument('--absolute_values', action='store_false', help = 'By default set the maximum value to be 255 so the contrast is strong. This turns it off.')
+
     args = parser.parse_args()
 
     if args.subcommand == 'gui':
@@ -75,6 +85,10 @@ def main():
         if not args.no_browser:
             print("Opening in default browser...")
             webbrowser.open_new_tab(args.destination)
+
+    if args.subcommand == 'preview':
+        image = DataLoader().load(args.filename)
+        image_preview(image, image_width = args.resolution, axis =  args.axis, slice = args.slice, relative_intensity= args.absolute_values)
         
 if __name__ == '__main__':
     main()
\ No newline at end of file
diff --git a/qim3d/utils/preview.py b/qim3d/utils/preview.py
new file mode 100644
index 00000000..a41b7b2a
--- /dev/null
+++ b/qim3d/utils/preview.py
@@ -0,0 +1,380 @@
+import numpy as np
+from PIL import Image
+
+# These are fixed because of unicode characters bitmaps. 
+# It could only be flexible if each character had a function that generated the bitmap based on size
+X_STRIDE = 4
+Y_STRIDE = 8 
+
+
+BACK_TO_NORMAL = "\u001b[0m"
+END_MARKER = -10
+
+"""
+For each unicode character that we can print (and is not inverse of another unicode character)
+there is a numnber which serves as a bitmap. That bitmap says how does the unicode character looks
+like in a field 4x8.
+"""
+BITMAPS = [
+    # Block graphics
+    # 0xffff0000, 0x2580,  // upper 1/2; redundant with inverse lower 1/2
+    0x00000000, '\u00a0',
+    0x0000000f, '\u2581',  # lower 1/8
+    0x000000ff, '\u2582',  # lower 1/4
+    0x00000fff, '\u2583', 
+    0x0000ffff, '\u2584',  # lower 1/2
+    0x000fffff, '\u2585', 
+    0x00ffffff, '\u2586',  # lower 3/4
+    0x0fffffff, '\u2587',
+    # 0xffffffff, 0x2588,  # full; redundant with inverse space
+
+    0xeeeeeeee, '\u258a',  # left 3/4
+    0xcccccccc, '\u258c',  # left 1/2
+    0x88888888, '\u258e',  # left 1/4
+
+    0x0000cccc, '\u2596',  # quadrant lower left
+    0x00003333, '\u2597',  # quadrant lower right
+    0xcccc0000, '\u2598',  # quadrant upper left
+    # 0xccccffff, 0x2599,  # 3/4 redundant with inverse 1/4
+    0xcccc3333, '\u259a',  # diagonal 1/2
+    # 0xffffcccc, 0x259b,  # 3/4 redundant
+    # 0xffff3333, 0x259c,  # 3/4 redundant
+    0x33330000, '\u259d',  # quadrant upper right
+    # 0x3333cccc, 0x259e,  # 3/4 redundant
+    # 0x3333ffff, 0x259f,  # 3/4 redundant
+
+    # Line drawing subset: no double lines, no complex light lines
+
+    0x000ff000, '\u2501',  # Heavy horizontal
+    0x66666666, '\u2503',  # Heavy vertical
+
+    0x00077666, '\u250f',  # Heavy down and right
+    0x000ee666, '\u2513',  # Heavy down and left
+    0x66677000, '\u2517',  # Heavy up and right
+    0x666ee000, '\u251b',  # Heavy up and left
+
+    0x66677666, '\u2523',  # Heavy vertical and right
+    0x666ee666, '\u252b',  # Heavy vertical and left
+    0x000ff666, '\u2533',  # Heavy down and horizontal
+    0x666ff000, '\u253b',  # Heavy up and horizontal
+    0x666ff666, '\u254b',  # Heavy cross
+
+    0x000cc000, '\u2578',  # Bold horizontal left
+    0x00066000, '\u2579',  # Bold horizontal up
+    0x00033000, '\u257a',  # Bold horizontal right
+    0x00066000, '\u257b',  # Bold horizontal down
+
+    0x06600660, '\u254f',  # Heavy double dash vertical
+
+    0x000f0000, '\u2500',  # Light horizontal
+    0x0000f000, '\u2500',  #
+    0x44444444, '\u2502',  # Light vertical
+    0x22222222, '\u2502',
+
+    0x000e0000, '\u2574',  # light left
+    0x0000e000, '\u2574',  # light left
+    0x44440000, '\u2575',  # light up
+    0x22220000, '\u2575',  # light up
+    0x00030000, '\u2576',  # light right
+    0x00003000, '\u2576',  # light right
+    0x00004444, '\u2577',  # light down
+    0x00002222, '\u2577',  # light down
+
+    0x11224488, '\u2571',  # diagonals
+    0x88442211, '\u2572',
+    0x99666699, '\u2573',
+
+    0, END_MARKER, 0  # End marker 
+]
+
+class Color:
+    def __init__(self, red:int, green:int, blue:int):
+        self.check_value(red)
+        self.check_value(green)
+        self.check_value(blue)
+        self.red = red
+        self.green = green
+        self.blue = blue
+
+    def check_value(sel, value:int):
+        assert isinstance(value, int), F"Color value has to be integer, this is {type(value)}"
+        assert value < 256, F"Color value has to be between 0 and 255, this is {value}"
+        assert value >= 0, F"Color value has to be between 0 and 255, this is {value}"
+    
+    def __str__(self):
+        """
+        Returns the string in ansi color format
+        """
+        return F"{self.red};{self.green};{self.blue}"
+
+
+def chardata(unicodeChar: str, character_color:Color, background_color:Color) -> str:
+    """
+    Given the character and colors, it creates the string, which when printed in terminal simulates pixels.
+    """
+    # ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB foreground color
+    # ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB background color
+    assert isinstance(character_color, Color)
+    assert isinstance(background_color, Color)
+    assert isinstance(unicodeChar, str)
+    return F"\033[38;2;{character_color}m\033[48;2;{background_color}m{unicodeChar}"
+
+def get_best_unicode_pattern(bitmap:int) -> tuple[int, str, bool]:
+    """
+    Goes through the list of unicode characters and looks for the best match for bitmap representing the given segment
+    It computes the difference by counting 1s after XORing the two. If they are identical, the count will be 0.
+    This character will be printed
+
+    Parameters:
+    -----------
+    - bitmap (int): int representing the bitmap the image segment.
+
+    Returns:
+    ----------
+    - best_pattern (int): int representing the pattern that was the best match, is then used to calculate colors
+    - unicode (str): the unicode character that represents the given bitmap the best and is then printed
+    - inverse (bool): The list does't contain unicode characters that are inverse of each other. The match can be achieved by simply using 
+        the inversed bitmap. But then we need to know if we have to switch background and foreground color.
+    """
+    best_diff = 8
+    best_pattern = 0x0000ffff
+    unicode = '\u2584'
+    inverse = False
+
+    bit_not = lambda n: (1 << 32) - 1 - n 
+
+    i = 0
+    while BITMAPS[i+1] != END_MARKER:
+        pattern = BITMAPS[i]
+        for j in range(2):
+            diff = (pattern ^ bitmap).bit_count()
+            if diff < best_diff:
+                best_pattern = pattern
+                unicode = BITMAPS[i+1]
+                best_diff = diff
+                inverse = bool(j)
+            pattern = bit_not(pattern)
+
+        i += 2
+
+    return best_pattern, unicode, inverse
+    
+def int_bitmap_from_ndarray(array_bitmap:np.ndarray)->int:
+    """
+    Flattens the array
+    Changes all numbers to strings
+    Creates a string representing binary number
+    Casts it to integer
+    """
+    return int(F"0b{''.join([str(i) for i in array_bitmap.flatten()])}", base = 2)
+
+def ndarray_from_int_bitmap(bitmap:int, shape:tuple = (8, 4))-> np.ndarray:
+    """
+    Gets the binary representation
+    Gets rid of leading '0b
+    Fill in leading zeros so its correct length
+    Make it list of integers
+    Make it numpy array
+    """
+    string = str(bin(bitmap))[2:].zfill(shape[0] * shape[1])
+    return np.array([int(i) for i in string]).reshape(shape)
+    
+def create_bitmap(image_segment:np.ndarray)->int:
+    """
+    Parameters:
+    ------------
+    image_segment: np.ndarray of shape (x, y, 3)
+
+    Returns:
+    ----------
+    bitmap: int, each bit says if the unicode character should cover this bit or not
+    """
+
+    max_color = np.max(np.max(image_segment, axis=0), axis = 0)
+    min_color = np.min(np.min(image_segment, axis=0), axis = 0)
+    rng = np.absolute(max_color - min_color)
+    max_index = np.argmax(rng)
+    if np.sum(rng) == 0:
+        return 0
+    split_threshold = rng[max_index]/2 + min_color[max_index]
+    bitmap = np.array(image_segment[:, :, max_index] <= split_threshold, dtype = int)
+
+
+    return int_bitmap_from_ndarray(bitmap)
+
+def get_color(image_segment:np.ndarray, char_array:np.ndarray) -> Color:
+    """
+    Computes the average color of the segment from pixels specified in charr_array
+    The color is then average over the part then unicode character covers or the background
+
+    Parameters:
+    -----------
+    - image_segment: 4x8 part of the image with the original values so average color can be calculated
+    - char_array: indices saying which pixels out of the 4x8 should be used for color calculation
+
+    Returns:
+    ---------
+    - color: containing the average color over defined pixels
+    """
+    colors = []
+    for channel_index in range(image_segment.shape[2]):
+        channel = image_segment[:,:,channel_index]
+        colors.append(int(np.average(channel[char_array])))
+
+    return Color(colors[0], colors[1], colors[2]) if len(colors) == 3 else Color(colors[0], colors[0], colors[0])
+
+def get_colors(image_segment:np.ndarray, char_array:np.ndarray) -> tuple[Color, Color]:
+    """
+    Parameters:
+    ----------
+    - image_segment
+    - char_array
+
+
+    Returns:
+    ----------
+    - Foreground color
+    - Background color
+    """
+    return get_color(image_segment, char_array == 1), get_color(image_segment, char_array == 0)
+
+def segment_string(image_segment:np.ndarray)-> str:
+    """
+    Creates bitmap so its best represent the color distribution
+    Finds the best match in unicode characters
+    If the best match is character taking up the whole field, then both colors are the same (it doesn't matter)
+    If the best match was inverted unicode character, background and foreground colors need to be switched,
+        otherwise it is not smooth
+    Creates and returns the ansi string to be printed
+    """
+    bitmap = create_bitmap(image_segment)
+    bitmap, unicode, reverse = get_best_unicode_pattern(bitmap)
+    if unicode == '\u00a0':
+        bg_color = fg_color = get_color(image_segment, ndarray_from_int_bitmap(bitmap))
+    else:
+        fg_color, bg_color = get_colors(image_segment, ndarray_from_int_bitmap(bitmap))
+        if reverse:
+            bg_color, fg_color = fg_color, bg_color
+    return chardata(unicode, fg_color, bg_color)
+
+def image_ansi_string(image:np.ndarray) -> str:
+    """
+    For each segment 4x8 finds the string with colored unicode character
+    Create the string for whole image
+
+    Parameters:
+    -----------
+    - image: image to be displayed in terminal
+
+    Returns:
+    ----------
+    - ansi_string: when printed, will render the image
+    """
+    string = []
+    for y in range(0, image.shape[0], Y_STRIDE):
+        for x in range(0, image.shape[1], X_STRIDE):
+
+            this_segment = image[y:y+Y_STRIDE, x:x+X_STRIDE, :]
+            if this_segment.shape[0] != Y_STRIDE:
+                segment = np.zeros((Y_STRIDE, X_STRIDE, this_segment.shape[2]))
+                segment[:this_segment.shape[0], :, :] = this_segment
+                this_segment = segment
+            string.append(segment_string(this_segment))
+
+        string.append(F"{BACK_TO_NORMAL}\n")
+
+    return ''.join(string)
+
+
+
+
+###################################################################
+#               Image preparation
+###################################################################
+
+def rescale_image(image:np.ndarray, size:tuple)->np.ndarray:
+    """
+    The unicode bitmaps are hardcoded for 4x8 segments, they cannot be scaled
+    Thus the image must be scaled to fit the desired resolution
+    """
+    if image.shape[2] == 1:
+        image = np.squeeze(image)
+    image = Image.fromarray(image)
+    image = np.array(image.resize(size))
+    if image.ndim != 3:
+        image = np.expand_dims(image, 2)
+    return image
+
+
+def check_and_adjust_image_dims(image:np.ndarray) -> np.ndarray:
+    if image.ndim == 2:
+        image = np.expand_dims(image, 2)
+    elif image.ndim == 3:
+        if image.shape[2] == 1:  # grayscale image
+            pass
+        elif image.shape[2] == 3: # colorful image
+            pass
+        elif image.shape[2] == 4: # contains alpha channel
+            image = image[:,:,:3]
+        elif image.shape[0] == 3: # torch images have color channels as the first axis
+            image = np.moveaxis(image, 0, -1)
+    else:
+        raise ValueError(F"Image must have 2 (grayscale) or 3 (colorful) dimensions. Yours has {image.ndim}")
+    
+    return image
+
+def check_and_adjust_values(image:np.ndarray, relative_intensity:bool = True) -> np.ndarray:
+    """
+    Checks if the values are between 0 and 255
+    If not, normalizes the values so they are in that interval
+
+    Parameters:
+    -------------
+    - image
+    - relative_intensity: If maximum values are pretty low, they will be barely visible. If true, it normalizes 
+        the values, so that the maximum is at 255
+
+    Returns:
+    -----------
+    - adjusted_image
+    """
+
+    m = np.max(image)
+    if m > 255:
+        image = np.array(255*image/m, dtype = np.uint8)
+    elif m < 1:
+        image = np.array(255*image, dtype = np.uint8)
+
+    if relative_intensity:
+        m = np.max(image)
+        image = np.array((image/m)*255, dtype = np.uint8)
+
+    return image
+
+def choose_slice(image:np.ndarray, axis:int = None, slice:int = None):
+    """
+    Preview give the possibility to choose axis to be sliced and slice to be displayed
+    """
+    if axis is not None:
+        image = np.moveaxis(image, axis, -1)
+
+    if slice is None:
+        slice = image.shape[2]//2
+    else:
+        if slice > image.shape[2]:
+            slice = image.shape[2]-1
+    return image[:,:, slice]
+
+###################################################################
+#               Main function
+###################################################################
+
+def image_preview(image:np.ndarray, image_width:int = 80, axis:int = None, slice:int = None, relative_intensity:bool = True):
+    if image.ndim == 3 and image.shape[2] > 4:
+        image = choose_slice(image, axis, slice)
+    image = check_and_adjust_image_dims(image)
+    ratio = X_STRIDE*image_width/image.shape[1]
+    image = check_and_adjust_values(image, relative_intensity)
+    image = rescale_image(image, (X_STRIDE*image_width, int(ratio * image.shape[0])))
+    print(image_ansi_string(image))
+
-- 
GitLab