From 388c8e7343d0ccf48071a8ef4054c7668a202c4f Mon Sep 17 00:00:00 2001 From: vladtechno Date: Tue, 18 Aug 2026 18:08:00 +1000 Subject: [PATCH] =?UTF-8?q?feat(pwa):=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=E2=80=94=20=D1=84=D0=B8=D1=80=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B7=D0=BD=D0=B0=D0=BA=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Была нарисованная «карта» на кремовом фоне из первых набросков. Теперь знак «Премиум Парк» из фирменного набора, на белой подложке сайта. Собирается из вектора скриптом scripts/gen-icons.py (три пути, команды M/L/H/V/C, сглаживание сверхдискретизацией ×4) — прежний gen-icons.mjs рисовал плитку вручную и к логотипу отношения не имел. Готовый PNG из набора не подошёл: знак внутри него занимает 264×195 из 512, и на иконке он бы размылился. Отдельная maskable-версия с полями: Android режет иконку по кругу, и знак без запаса теряет края. Ссылка apple-touch-icon в index.html — iOS манифест не читает и берёт иконку «на экран Домой» только оттуда. Co-Authored-By: Claude Opus 5 --- driver-pwa/frontend/index.html | 3 + .../public/icons/apple-touch-icon.png | Bin 0 -> 7322 bytes driver-pwa/frontend/public/icons/icon-192.png | Bin 909 -> 7861 bytes driver-pwa/frontend/public/icons/icon-512.png | Bin 4982 -> 21963 bytes .../public/icons/icon-maskable-512.png | Bin 0 -> 17633 bytes .../frontend/public/manifest.webmanifest | 5 +- driver-pwa/frontend/scripts/gen-icons.mjs | 76 --------------- driver-pwa/frontend/scripts/gen-icons.py | 92 ++++++++++++++++++ 8 files changed, 98 insertions(+), 78 deletions(-) create mode 100644 driver-pwa/frontend/public/icons/apple-touch-icon.png create mode 100644 driver-pwa/frontend/public/icons/icon-maskable-512.png delete mode 100644 driver-pwa/frontend/scripts/gen-icons.mjs create mode 100644 driver-pwa/frontend/scripts/gen-icons.py diff --git a/driver-pwa/frontend/index.html b/driver-pwa/frontend/index.html index bdd67ec..c276196 100644 --- a/driver-pwa/frontend/index.html +++ b/driver-pwa/frontend/index.html @@ -4,6 +4,9 @@ + + + diff --git a/driver-pwa/frontend/public/icons/apple-touch-icon.png b/driver-pwa/frontend/public/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba5e2ce541980ddf02e62d3194aa719123d7c26 GIT binary patch literal 7322 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 diff --git a/driver-pwa/frontend/public/icons/icon-512.png b/driver-pwa/frontend/public/icons/icon-512.png index 20799d3bbf4d3f95fd0502a34fdddd437bdb8203..b6b9efc5d191f1dc85b17806ad1f3e2b1bf22bb0 100644 GIT binary patch literal 21963 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 literal 4982 zcmeHLeNa=`6+iD0!5|PmR$xIPil8HY;8=m}LJ;|q3P>OXG}Z*QyW15EPFszEhffi( zr5Mqb(xS_k#Ygzc?oJ7vLU=+|b{(rbeOc+~k}&wudDS7H55fbbi6xo3-Elh8j^iKx z_3r%Uo^#JV=iT$Wzx&Jdv?Nz&KW6}NP2L)x0f1VDC@gfee4Z*O7QibyIX+gTIRE&Y z4X1)1RwWAa_lDh_yL$D^#xl;}1tfm+imz{ckd>WvchKirWU=4$m7{Z$H|L(!%{jn< zX~{DL$S4HBi3=Q*N$!Op<_FYcA&Zn8&gRgsfAmd`$1rlKwOlms8iA&3;UN zt`9;UrLJ*nga*Gu?l3FCPUAb68x1SrRIAGUmRjz<6e-BT6!=nF5+4UkM1lUYOKkXt zZLlOW&{w8q6E`Hml8iuapcLGR?CSj(i2KH=g%qCjWkCcU=OvWwj*7$3haHbe?kpjgJ_!U00Qv@Q;MPO^N^ zQV}YZ7p$)raL82V@#tO-IiPof?sna=*(k&$V@yb~2cimw0ChkVIi`=On(_i(mTIYS zimn};;o?r}ayL^nlYbAhSW*s7<|;OE;t*<#rE?v660p!C{)mas5Xf+&?p#kLC{8MG z!I;pH^89z8z?Fj#)1w1Fln}9P^Ku%KH(htV&q}UbN(TCx=|ltU^L4ZMBq(2h*`=idw!7l~pQ#4QJ`v z3dm^+2qG`C50-rMNBV8+*__WYLcph`LnfFSND0kEdvD!`#IHueO{(9}SAL33Vy&f>EEx?x)Gng(BTw0wRHCb4lC6EF7 z7?PJ|c(|WKYLqgN=%*|(y$Mr?T4!#@Ja?0JJijTmhuV9bH4mt$8O7(UKpF&PdWXW# zS3nBWLW$8Ma{HL-o{Cj&1jo9HybHQ#7{!3)`GK9fH4vH4OjF zo}jKB*eAIez1m88rl=Bp#k{;$);F$U_}g%slP)24qCqq!KWq2VEYN9Udk5CqO=?+F zza!(OCB~j?LS;G8npC=JQ7u(?w_bPi_Ch?DA;VjE>+&+j4wl%RGzz*j!rtpUZRN=q z2JRdphJVs-Hz8DO^2B4AaCezC19$2L8qJR0?MOknHOw|~V7B78@)BxvwAL}FUC?IY zFlh@&*B1fo#BxTs^aW?!|3$(7z-s!vsP`8`#EWP?W^zkc5{FmA0e9=4p{EC&x2KPZ z;4a^~Qmejv@u&5}Ezlin{e>Qkmp`N1ZJtn=Y}MKfxiHi@te&420wG*lfd8A( z8}z^Z&u8P@b4JzYAWxTP&8N!?G}7KIq@cuFmJ}e18S#7-!Vs9zOKeH!z@zN9MwYYi zHWBm3@NFW#FA?8qKjKziXjE)(=KKM(^gZ$atMBEf2WAho4PS!pIBTQpip6BPUnuKP zqnov*4tXR6ji8ZFeHXie9D{wV*$pIIK;zn}`GV)`-UPo9x`tA^7Sg60`8! z!Iyci@C=*&9WIP#M#@yg)RPsql_&Qx%gU#Ssfl?#bk_)eremYi>%eQs>6`l zMorMAo@cr+y#0-viZX)`u9jP0FP zEN6yZ35s}bvJ%!?8Vp;Qze6}7AJ0PhBGvbRVjk}m7u!XY17{Vbo%$i7*&MwE-+~o( zdch(p$Ogto$K%P&jRa^Dsyt*F*v~v*Ked-rBQosbkgFNK?e3jG3(*upzP8WPa#0_! zU(|oAJP*@Ks39eci}2RzUpWiL~V|i;dMeoT5*bXyvII{ zkKTt*5%Q3usSvd_`XgLR$b;oU5O6VI6DgszXS5!`%jEeRlW6}h?^vaflU)kM>EoQt zy==%tF=}j}KXaJfjd>l3u?i|9Qao;ssRl*2(oE(vuJ;~VhwXWS>51VNI4{i4w)<2%cwHlWx-^KA01+^LVGw;C;vgW?R@C zq^?O9{AdN3w=v^raT@miP^wiqZ?G%pZ|PCTA}Qvt@U|*#C*Hi$HvfQGb|RE+f8xgh zX`|q@>0>(eiIM|B^eA_Gro8(0N*JV^yt@ePVCw66LU{Xz^WQ&QJ)L{!;7=F$hYJ2= Qc~67ngtYjMEwbbP1nfUtJpcdz diff --git a/driver-pwa/frontend/public/icons/icon-maskable-512.png b/driver-pwa/frontend/public/icons/icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d50a201db00c9e54a34121da6c512a7421608b GIT binary patch literal 17633 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 literal 0 HcmV?d00001 diff --git a/driver-pwa/frontend/public/manifest.webmanifest b/driver-pwa/frontend/public/manifest.webmanifest index bf6dde8..b80149f 100644 --- a/driver-pwa/frontend/public/manifest.webmanifest +++ b/driver-pwa/frontend/public/manifest.webmanifest @@ -7,7 +7,8 @@ "background_color": "#EEF1F5", "theme_color": "#EEF1F5", "icons": [ - { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" } + { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, + { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, + { "src": "/icons/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" } ] } diff --git a/driver-pwa/frontend/scripts/gen-icons.mjs b/driver-pwa/frontend/scripts/gen-icons.mjs deleted file mode 100644 index a2fd789..0000000 --- a/driver-pwa/frontend/scripts/gen-icons.mjs +++ /dev/null @@ -1,76 +0,0 @@ -// Генерация PWA-иконок «Премиум Водитель» без сторонних либ (zlib PNG-энкодер). -// Дизайн: кремовый фон #F3EEE3, тёмная скруглённая плитка #1C1B19, -// внутри белая «карта» #F6F2E9 с тёмной полосой (финансовый мотив). Без жёлтого/текста. -import zlib from "node:zlib"; -import fs from "node:fs"; -import path from "node:path"; - -const CREAM = [243, 238, 227]; -const INK = [28, 27, 25]; -const CARD = [246, 242, 233]; - -function crc32(buf) { - let c = ~0; - for (let i = 0; i < buf.length; i++) { - c ^= buf[i]; - for (let k = 0; k < 8; k++) c = (c >>> 1) ^ (0xedb88320 & -(c & 1)); - } - return (~c) >>> 0; -} -function chunk(type, data) { - const t = Buffer.from(type, "ascii"); - const len = Buffer.alloc(4); len.writeUInt32BE(data.length, 0); - const body = Buffer.concat([t, data]); - const crc = Buffer.alloc(4); crc.writeUInt32BE(crc32(body), 0); - return Buffer.concat([len, body, crc]); -} -function encodePng(N, rgba) { - const sig = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]); - const ihdr = Buffer.alloc(13); - ihdr.writeUInt32BE(N, 0); ihdr.writeUInt32BE(N, 4); ihdr[8] = 8; ihdr[9] = 6; - const stride = N * 4; - const raw = Buffer.alloc(N * (stride + 1)); - for (let y = 0; y < N; y++) { - raw[y * (stride + 1)] = 0; - rgba.copy(raw, y * (stride + 1) + 1, y * stride, y * stride + stride); - } - return Buffer.concat([sig, chunk("IHDR", ihdr), chunk("IDAT", zlib.deflateSync(raw)), chunk("IEND", Buffer.alloc(0))]); -} -function inRoundRect(px, py, x0, y0, x1, y1, r) { - if (px < x0 || px >= x1 || py < y0 || py >= y1) return false; - const cx = px < x0 + r ? x0 + r : px >= x1 - r ? x1 - r : px; - const cy = py < y0 + r ? y0 + r : py >= y1 - r ? y1 - r : py; - const dx = px - cx, dy = py - cy; - return dx * dx + dy * dy <= r * r; -} - -function draw(N) { - const buf = Buffer.alloc(N * N * 4); - // tile (centered ~64%) - const tile = Math.round(N * 0.64), tx0 = Math.round((N - tile) / 2), ty0 = tx0; - const tx1 = tx0 + tile, ty1 = ty0 + tile, tr = Math.round(tile * 0.24); - // card inside tile - const cw = Math.round(tile * 0.62), ch = Math.round(tile * 0.42); - const cx0 = Math.round((N - cw) / 2), cy0 = Math.round((N - ch) / 2); - const cx1 = cx0 + cw, cy1 = cy0 + ch, cr = Math.round(ch * 0.18); - // stripe near top of card - const sy0 = cy0 + Math.round(ch * 0.22), sy1 = sy0 + Math.round(ch * 0.14); - for (let y = 0; y < N; y++) { - for (let x = 0; x < N; x++) { - let col = CREAM; - if (inRoundRect(x, y, tx0, ty0, tx1, ty1, tr)) col = INK; - if (inRoundRect(x, y, cx0, cy0, cx1, cy1, cr)) col = CARD; - if (x >= cx0 && x < cx1 && y >= sy0 && y < sy1) col = INK; - const o = (y * N + x) * 4; - buf[o] = col[0]; buf[o + 1] = col[1]; buf[o + 2] = col[2]; buf[o + 3] = 255; - } - } - return encodePng(N, buf); -} - -const dir = path.resolve("public/icons"); -fs.mkdirSync(dir, { recursive: true }); -for (const N of [192, 512]) { - fs.writeFileSync(path.join(dir, `icon-${N}.png`), draw(N)); - console.log(`wrote icon-${N}.png`); -} diff --git a/driver-pwa/frontend/scripts/gen-icons.py b/driver-pwa/frontend/scripts/gen-icons.py new file mode 100644 index 0000000..e03e9f2 --- /dev/null +++ b/driver-pwa/frontend/scripts/gen-icons.py @@ -0,0 +1,92 @@ +"""Иконки приложения из фирменного знака «Премиум Парк». + +Знак — вектор (assets/logos/premium_park_favicon_pack/favicon.svg, поле 64×64, +чёрные штрихи + янтарная дуга). Растеризуем его сами: путей всего три, команды — +только M/L/H/V/C/Z, а тянуть в проект зависимость ради этого не хочется. + +Сглаживание — сверхдискретизацией ×4: рисуем крупнее и уменьшаем. Так края +получаются чище, чем у любой заливки «в лоб». + +Запуск (нужен Pillow): + python scripts/gen-icons.py +""" +from pathlib import Path +import re + +from PIL import Image, ImageDraw + +SVG = Path(r"C:\VibeCoding\assets\logos\premium_park_favicon_pack\favicon.svg") +OUT = Path(__file__).resolve().parent.parent / "public" / "icons" +BG = (255, 255, 255, 255) # --s-paper сайта: знак нарисован для светлой подложки +SS = 4 # кратность сверхдискретизации +# Полезная часть знака внутри поля 64×64 (замерено по путям). +MARK = (11.0, 8.0, 59.4, 43.7) + + +def _curve(p0, p1, p2, p3, steps=24): + for i in range(1, steps + 1): + t = i / steps + u = 1 - t + yield (u*u*u*p0[0] + 3*u*u*t*p1[0] + 3*u*t*t*p2[0] + t*t*t*p3[0], + u*u*u*p0[1] + 3*u*u*t*p1[1] + 3*u*t*t*p2[1] + t*t*t*p3[1]) + + +def flatten(d: str) -> list[tuple[float, float]]: + """Путь SVG → многоугольник. Поддержаны M, L, H, V, C, Z — больше в знаке нет.""" + tokens = re.findall(r"[MLHVCZmlhvcz]|-?\d*\.?\d+", d) + pts: list[tuple[float, float]] = [] + cur = (0.0, 0.0) + cmd = "" + i = 0 + while i < len(tokens): + t = tokens[i] + if t.isalpha(): + cmd = t + i += 1 + continue + n = lambda k: float(tokens[i + k]) + if cmd in "ML": + cur = (n(0), n(1)); pts.append(cur); i += 2 + elif cmd == "H": + cur = (n(0), cur[1]); pts.append(cur); i += 1 + elif cmd == "V": + cur = (cur[0], n(0)); pts.append(cur); i += 1 + elif cmd == "C": + p1, p2, p3 = (n(0), n(1)), (n(2), n(3)), (n(4), n(5)) + pts.extend(_curve(cur, p1, p2, p3)); cur = p3; i += 6 + else: + i += 1 + return pts + + +def paths() -> list[tuple[list[tuple[float, float]], str]]: + svg = SVG.read_text(encoding="utf-8") + out = [] + for d, fill in re.findall(r' Image.Image: + """inset — доля стороны под знак. Для maskable нужна безопасная зона: + Android режет иконку по кругу, и знак без запаса теряет края.""" + big = size * SS + img = Image.new("RGBA", (big, big), BG) + draw = ImageDraw.Draw(img) + x0, y0, x1, y1 = MARK + scale = min(big * inset / (x1 - x0), big * inset / (y1 - y0)) + dx = (big - (x1 - x0) * scale) / 2 - x0 * scale + dy = (big - (y1 - y0) * scale) / 2 - y0 * scale + for pts, fill in paths(): + draw.polygon([(x * scale + dx, y * scale + dy) for x, y in pts], fill=fill) + return img.resize((size, size), Image.LANCZOS) + + +if __name__ == "__main__": + OUT.mkdir(parents=True, exist_ok=True) + for name, size, inset in (("icon-192.png", 192, 0.82), + ("icon-512.png", 512, 0.82), + ("icon-maskable-512.png", 512, 0.60), + ("apple-touch-icon.png", 180, 0.82)): + compose(size, inset).save(OUT / name) + print("собрано", name)