From 34768af68531d6e70db3ec9abd28cf8a5988fd8f Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:39:49 -0500 Subject: [PATCH] Generate dynamic favicon ico file --- README.md | 1 - public/favicon.ico | Bin 1879 -> 0 bytes src/pages/favicon.ico.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) delete mode 100644 public/favicon.ico create mode 100644 src/pages/favicon.ico.ts diff --git a/README.md b/README.md index 7c5810a..d7ce089 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,6 @@ Static files served directly to the browser are within the `public` directory at ```md public/ -├── favicon.ico ├── scripts/ │ └── vendor/ │ ├── gsap/ # Animations powered by GSAP (GreenSock Animation Platform) diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 456b3a7ef2835240723d6e2451fc8de55195bcf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1879 zcmV-d2dMY}0096301yxW0000W07C)*044wc03aX$0000W0PX|;0BHgM0EtjeM-2)Z z3IG5A4M|8uQUCw|5C8xG5C{eU001BJ|6u?C0t!h)K~#90b(1@96HyR_zqz~X7n?W_ z8>0#VG`Uhm#J z6l;?N+f$D2oO{lhGXezG+D#F;qpDMYVR9*;BJx{RcUrC1V_CL#D=Y;MymP1mQap2h zGKz>GA~@&PWnt0wlAeh`WiXBi)MLfSL<|pzswUy-ldimaBVqV9ij*I}3{T!vNwcD> zIs#w@OyV#MU~bxD1UfwdfiQ%2N9d+Pt)fKXSP%e}#U-nqp5PUh7aWawkIRL6tOTLb z`W*0W*ANEdLBetgY89oM!lSz#E??}Eb_D036f0Y=Ydn8fWv;F`H^xwFtqye#!ScK? z(wIVubH!H7pm&79!D^tN!OuOzr87A%H`-_}M3GW1!I$rbTMwt$PvnT4@GzPP#8u_% zuHnV|DuKY>AHjPF4D>S@@#3F^!ys7>Nmoew!tHB4mQFaHy{(cvK?EwLgAqd!&x5@v zL;)P1QD&z-=WWi_3mH>2&vRQr1kG&F1|e2zFEzoe;NSrJ0bXFh8R} zK-zcP0${D(5Rr9Nou&A2>=_NR;d3YZ>h;yiN^9dU;>X;sB{|;~00000NkvXXu0mjf ziBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<^wMj%lRCt`VmrrP1RTRd5 z=id9?Op?i@mP!%p%J_n)h{aNiEkz3cK_Uo7+G2&0LItIQh+3%Gv|u-iE(LWVF4T=! zUARyX8x*OCf2yrBRMSPPP}`=NWF|B3y?b1|nMu;7X`Du*lXUY*=L0iKtu%Z{Q)N;cX(B)&59^Xs7@ga6=%Cb!g}uk zwm4Pts&Myh387QG$^sHf7SLE_;;dz|B7{L#NFXA8Zn`SG{B)IlyK2NUf>}g2a0`)^eUleas4acVBOl3d`_917Ot(BEGtA|vjO~?ky561(J{_MzyooT{B(;1p+v=*jj zgxB}g7=EG#m(10D(JE97TlNlc=A7xMJKW_LR3UIM{!74p>tiI&vI0$yX#VyJK>#QI zv`oziwnI@$6h(`2t~Z1mZ}5b{Tz%Uu+PcHQ`HO})%}CGJ&~k-&MFv{P=adUmf;MX| z0=2q;g0XWXoC6Uhsm}>ENuW2c?aXyVpj8UUL|UuE)_Y=}+g>AR#%~=YT08d&K?ui= zJKp@T=i1SiBG4j{F@Wl| zF0bTUHr!0Hkt~8&!3D}sCmj=iTXNyj!C?szUa?SMwjm@53+9CgG~(vGaG851NoGzf z(!k|Vg`Q9$$6OZ()EjW?&7OQ7&Rr0uYeJz1k~CXlO{R^j`NOgaK=zj^3Pdeo`14t+IEt%Es?P zzB(2xnt^4Da4`tk45`!v^_d9!dzD5EFFjS`ne8tT zB^zF=i^`f+%0NL$QWz*G+cq@7K!2a&J?t5tC2(BPmPS=)RzyM}O*1{DDL4z$RblwW z0iJ)Yz_AknMq$II2E&`{RH}lV+xDyh#!aS&gTMC!AQ4D=~Ic_mKps3y(@L7JwYm&@h%&B(}zEtktN}-U>D}ga`40w`BNP&M R|A7Di002ovPDHLkV1ibgTMhsK diff --git a/src/pages/favicon.ico.ts b/src/pages/favicon.ico.ts new file mode 100644 index 0000000..891b87c --- /dev/null +++ b/src/pages/favicon.ico.ts @@ -0,0 +1,28 @@ +import type { APIRoute } from "astro"; +import sharp from "sharp"; +import ico from "sharp-ico"; +import path from "node:path"; + +const faviconSrc = path.resolve("src/images/icon.png"); + +export const GET: APIRoute = async () => { + + // Resize the image to multiple sizes + const sizes = [16, 32, 48, 64, 128, 256]; + + const buffers = await Promise.all( + sizes.map(async (size) => { + return await sharp(faviconSrc) + .resize(size) + .toFormat("png") + .toBuffer(); + }) + ); + + // Convert the image to an ICO file + const icoBuffer = ico.encode(buffers); + + return new Response(icoBuffer, { + headers: { "Content-Type": "image/x-icon" }, + }); +};