генерация иконки и сплэша
By Пользователь Google · Published July 23, 2026
Генерирует PNG-ассеты (иконка и логотип сплэша) с золотой короной на тёмном фоне для приложения Царь-Путь.
- image-generation
- pillow
- ui-assets
- flutter
7 cells1 experiment1 views0 forks
Inside this notebook
# Генерация царских ассетов: золотая корона на тёмном фоне.
# Создаёт 3 PNG в /home/user/assets/... (авто-сохранятся в outputs):
# icon/crown_icon.png — иконка (корона на #0D0D0D)
# icon/crown_foreground.png — адаптивный передний план (корона на прозрачном)
# splash/crown_logo.png — логотип сплэш-экрана (корона на прозрачном)
%pip install -q Pillow
import os
from PIL import Image, ImageDraw
# фирменные цвета «Царский софт»
BG = (13, 13, 13, 255) # #0D0D0D
GOLD = (212, 175, 55, 255) # #D4AF37
GOLD_DK = (150, 118, 38, 255) # тёмное золото (контур)
GOLD_LT = (241, 220, 133, 255) # светлое золото (блики/камни)
RED = (139, 0, 0, 255) # #8B0000 (царский бархат)
RING = (107, 86, 24, 255) # приглушённое золото для медальона
# локальные координаты короны (центр ~ (0,0)); y вниз
…# Точный анализатор Dart: считает скобки ТОЛЬКО в коде (строки/комментарии вырезаются).
# Это отвечает на вопрос, скомпилируется ли файл (а не на «сколько скобок в тексте отзывов»).
src = open('main.dart', encoding='utf-8').read()
i, n = 0, len(src)
code = []
while i < n:
c = src[i]
nxt = src[i + 1] if i + 1 < n else ''
if c == '/' and nxt == '/': # line comment
while i < n and src[i] != '\n':
i += 1
continue
if c == '/' and nxt == '*': # block comment
i += 2
while i < n - 1 and not (src[i] == '*' and src[i + 1] == '/'):
i += 1
i += 2
…=== БАЛАНС СКОБОК В КОДЕ (строки/комментарии исключены) ===
{}: open= 449 close= 449 OK
(): open=3250 close=3250 OK
[]: open= 305 close= 305 OK
depth {}: итог=0, мин. глубина=0 (должна быть >=0)
depth (): итог=0, мин. глубина=0 (должна быть >=0)
depth []: итог=0, мин. глубина=0 (должна быть >=0)
ВЕРДИКТ: ✅ код структурно корректен# Служебная ячейка: здесь агент собирает итоговый main.dart v1.2 (конструктор мультимодальных маршрутов).
# Сам файл отдаётся через write_file в outputs; эта ячейка — рабочий блокнот-контекст проекта.
print("Царь-Путь v1.2 — сборка интерактивного конструктора карты…")# Проверка эмодзи транспорта и семантических мелочей v1.2 (обход shell-кодировки).
src = open('main.dart', encoding='utf-8').read()
print("=== ЭМОДЗИ ТРАНСПОРТА В ФАЙЛЕ ===")
for name, e in [("Самолёт","✈️"),("Паром","⛴️"),("Авто","🚗"),("Поезд","🚆"),("Пешком","🥾")]:
print(f" {name:9s} {e} : {src.count(e)}")
print("\n=== СЕМАНТИЧЕСКИЕ ПРОВЕРКИ ===")
checks = {
"enum DashStyle (5 стилей)": all(s in src for s in ["solid","dashed","dotted","dashDot","rail"]),
"enum PointKind (warning есть)": "enum PointKind { hotel, food, sight, warning }" in src,
"enum Transport (5 типов)": "enum Transport { plane, ferry, car, train, walk }" in src,
"RoutePoint.copyWith": "RoutePoint copyWith(" in src,
"painter shouldRepaint": "bool shouldRepaint(covariant RouteMapPainter old)" in src,
"RoutePoint в TravelRoute.toJson": "'routePoints': routePoints.map((e) => e.toJson()).toList()" in src,
"TravelRoute.fromJson парсит routePoints": "RoutePoint.fromJson(e as Map<String, dynamic>)" in src,
"демо r6 мультимодальный": "legFromPrev: Transport.plane" in src and "legFromPrev: Transport.train" in src,
"демо r6 предупреждение": "kind: PointKind.warning" in src,
…=== ЭМОДЗИ ТРАНСПОРТА В ФАЙЛЕ === Самолёт ✈️ : 4 Паром ⛴️ : 1 Авто 🚗 : 4 Поезд 🚆 : 4 Пешком 🥾 : 4 === СЕМАНТИЧЕСКИЕ ПРОВЕРКИ === [OK] enum DashStyle (5 стилей) [OK] enum PointKind (warning есть) [OK] enum Transport (5 типов) [OK] RoutePoint.copyWith [OK] painter shouldRepaint [OK] RoutePoint в TravelRoute.toJson [OK] TravelRoute.fromJson парсит routePoints [OK] демо r6 мультимодальный [OK] демо r6 предупреждение [OK] конструктор возвращает List…
# Семантическая проверка Царь-Путь v2.0 (i18n, paywall, мат.движок, облако).
src = open('main.dart', encoding='utf-8').read()
checks = {
# i18n
"enum AppLang {ru,en}": "enum AppLang { ru, en }" in src,
"langNotifier (ValueNotifier)": "final langNotifier = ValueNotifier<AppLang>(AppLang.ru)" in src,
"t(ru,en) функция": "String t(String ru, String en)" in src,
"LangToggle виджет": "class LangToggle extends StatelessWidget" in src,
"ValueListenableBuilder в TsarPutApp": "valueListenable: langNotifier" in src,
# paywall
"premiumNotifier": "final premiumNotifier = ValueNotifier<bool>(false)" in src,
"freePointLimit = 3": "const int freePointLimit = 3" in src,
"PaywallSheet": "class PaywallSheet extends StatefulWidget" in src,
"ensurePremium()": "Future<bool> ensurePremium(BuildContext context)" in src,
"Т-Банк / ЮКасса": "Т-Банк / ЮКасса" in src,
"setPremium persist": "Future<void> setPremium(bool v)" in src,
# math engine
…[OK] enum AppLang {ru,en}
[OK] langNotifier (ValueNotifier)
[OK] t(ru,en) функция
[OK] LangToggle виджет
[OK] ValueListenableBuilder в TsarPutApp
[OK] premiumNotifier
[OK] freePointLimit = 3
[OK] PaywallSheet
[OK] ensurePremium()
[OK] Т-Банк / ЮКасса
[OK] setPremium persist
[OK] RouteMath класс
[OK] speedKmh (5 транспортов)
[OK] legKm/legHours
[OK] totalKm/totalHours
[OK] fmtDuration
[OK] tsarIdNotifier
[OK] TsarIdSheet
[OK] openTsarId()
[OK] Царь-Казна эксп…# Семантическая проверка интеграции flutter_map (REAL MAP) в Царь-Путь v2.0.
import re
src = open('main.dart', encoding='utf-8').read()
checks = {
# импорты
"import flutter_map": "import 'package:flutter_map/flutter_map.dart';" in src,
"import latlong2": "import 'package:latlong2/latlong.dart';" in src,
# модель: реальные координаты
"RoutePoint.lat": "final double? lat;" in src,
"RoutePoint.lon": "final double? lon;" in src,
"RoutePoint.hasGeo": "bool get hasGeo => lat != null && lon != null;" in src,
"lat/lon в toJson": "'lat': lat" in src and "'lon': lon" in src,
# гео-хелперы
"checkMapOnline()": "Future<bool> checkMapOnline()" in src,
"пинг тайла OSM": "https://tile.openstreetmap.org/0/0/0.png" in src,
"withSchematic()": "List<RoutePoint> withSchematic(" in src,
"_fitZoom()": "double _fitZoom(" in src,
…[OK] import flutter_map [OK] import latlong2 [OK] RoutePoint.lat [OK] RoutePoint.lon [OK] RoutePoint.hasGeo [OK] lat/lon в toJson [OK] checkMapOnline() [OK] пинг тайла OSM [OK] withSchematic() [OK] _fitZoom() [OK] _centerOf() [OK] haversine (_haversineKm) [OK] OsmMapLayer [OK] GeoRouteMap [OK] PointInfoCard [OK] FlutterMap( [OK] MapOptions(initialCenter [OK] TileLayer urlTemplate OSM [OK] userAgentPackageName [OK] errorTileCallback [OK] ErrorTileCallBack с…
# Семантическая проверка v3.0 (QR/PDF, голос, погода, гео-фото) в Царь-Путь.
import re
src = open('main.dart', encoding='utf-8').read()
checks = {
# импорты новых пакетов
"import exif": "import 'package:exif/exif.dart';" in src,
"import image_picker": "import 'package:image_picker/image_picker.dart';" in src,
"import pdf": "import 'package:pdf/pdf.dart';" in src,
"import pdf/widgets as pw": "import 'package:pdf/widgets.dart' as pw;" in src,
"import printing": "import 'package:printing/printing.dart';" in src,
"import qr_flutter": "import 'package:qr_flutter/qr_flutter.dart';" in src,
"import speech_to_text": "import 'package:speech_to_text/speech_to_text.dart';" in src,
"import dart:typed_data": "import 'dart:typed_data';" in src,
"НЕТ dart:io (Web-safe)": "import 'dart:io'" not in src,
# модель фото
"PhotoRecord класс": "class PhotoRecord {" in src,
"RoutePoint.photos": "final List<PhotoRecord> photos;" in src,
…[OK] import exif [OK] import image_picker [OK] import pdf [OK] import pdf/widgets as pw [OK] import printing [OK] import qr_flutter [OK] import speech_to_text [OK] import dart:typed_data [OK] НЕТ dart:io (Web-safe) [OK] PhotoRecord класс [OK] RoutePoint.photos [OK] freePhotoLimit = 2 [OK] totalPhotosIn() [OK] WeatherService [OK] WeatherBlock [OK] Open-Meteo API [OK] WMA иконка (wb_sunny) [OK] RouteCodec [OK] RouteCodec.encode [OK] RouteCodec.decode [OK] Qr…