Filipe: "kannst du bitte das logo wenn man es installiert auf pc oder handy und oben rechts in der leiste noch perfektionnieren." Beide Stellen hatten denselben Fehler, und er war derselbe wie an mehreren Stellen davor: Der Husky lag als MASKE auf einer Farbflaeche. Von einer Maske zaehlt nur der Alphakanal, und die Vorlage ist rundum freigestellt -- uebrig blieb eine geschlossene Flaeche in Hundeform. Kein Auge, keine Schnauze, kein Ohrinneres. Ein Fleck. Jetzt liegt an beiden Stellen dieselbe Zeichnung im Mischmodus "screen" ueber einer stahlblauen Silhouette: Schwarz laesst das Fell dunkel, Weiss hebt Gesicht, Ohren und Auge heraus. Gleiche Farben, gleicher Daempfer (.88) -- ein Zeichen, zwei Orte. App-Symbol ausserdem: - Die Chili lief mit ihrem Stiel quer ueber den Fang. Sie ist jetzt gespiegelt, kleiner und liegt hinter dem Hals. - Der Hals endete in einer geraden Kante (die Vorlage ist unten angeschnitten). Eine zweite Maske blendet ihn aus, statt ihn abzuschneiden. - Der Grund war matschig: Rot und Blau trafen sich diagonal genau dort, wo der Kopf steht. Jetzt kaltes Licht oben, warmes unten. - Unter 64 px faellt die Gesichtszeichnung weg, die Chili aber NICHT -- klein erkennt man ein Zeichen zuerst an der Farbe. - Alle Masse haengen an einer Zahl (Groesse der Gruppe), nicht an sechs. Kopfleiste ausserdem: - Die Chili links hatte einen BLAUEN Schein -- aus der Zeit, als dort der Husky stand. Der Schein ist nie mitgewandert. Jetzt warm. - `filter` ersetzt, es ergaenzt nicht: Beim Ueberfahren wurde der Schein geloescht und das Zeichen dabei flacher statt heller. Behoben. Damit die Aenderung auch ankommt: - Der Stempel gilt jetzt auch fuer die App-Symbole und fuer das Manifest. Bilder werden einen Tag zwischengespeichert, das Symbol der INSTALLIERTEN App gar nicht neu geholt -- ohne Stempel haette niemand das neue Zeichen gesehen. - pruef-zwischenspeicher prueft das (18 -> 21 Pruefungen). Werkzeuge: - tools/ausschnitt.mjs (neu): schneidet aus einem Bildschirmfoto ein Stueck heraus und vergroessert die PNG-Datei. Noetig, weil eine Vergroesserung per CSS-transform den Browser NEU rechnen laesst -- ich habe damit 264 px beurteilt und geglaubt, es seien 22, und daraus den falschen Schluss gezogen, ein Gesicht trage bei 22 px nicht. - tools/ansicht.mjs: AUSSCHNITT=<selektor> nimmt nur ein Element auf. - workspace-symbol.mjs: SYMBOL_ZIEL lenkt die Ausgabe um (Entwuerfe ansehen, ohne die sechs echten Dateien zu ueberschreiben), und zwei Gegenproben pruefen jetzt, dass Gesicht und Chili wirklich zu sehen sind -- die alte Pruefung sagte nur "es steht etwas drauf" und haette den Fleck anstandslos durchgewunken. Co-Authored-By: Claude Opus 5 <[email protected]>
42 lines
2.0 KiB
JavaScript
42 lines
2.0 KiB
JavaScript
/* AUSSCHNITT — schneidet ein Stueck aus einem PNG heraus und
|
|
vergroessert es, damit man Details wirklich sieht.
|
|
|
|
Warum ein eigenes Werkzeug: Ein Bildschirmfoto von 1600 px wird beim
|
|
Ansehen heruntergerechnet. Ein 22-px-Zeichen darin ist danach ein
|
|
Fleck aus vier Pixeln -- man beurteilt dann die Verkleinerung, nicht
|
|
das Zeichen. Hier wird der Ausschnitt VOR dem Ansehen vergroessert,
|
|
und zwar ohne Glaettung: So sieht man genau die Pixel, die auch der
|
|
Bildschirm zeigt.
|
|
|
|
Aufruf: node tools/ausschnitt.mjs <datei> <x> <y> <breite> <hoehe> [faktor] [ziel]
|
|
*/
|
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
|
|
const [datei, x, y, b, h, faktor = "4", ziel = "/tmp/ausschnitt.png"] = process.argv.slice(2);
|
|
if (!datei || !b) {
|
|
console.error("Aufruf: node tools/ausschnitt.mjs <datei> <x> <y> <breite> <hoehe> [faktor] [ziel]");
|
|
process.exit(2);
|
|
}
|
|
const roh = readFileSync(datei).toString("base64");
|
|
|
|
const { chromium } = await import(
|
|
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
|
const browser = await chromium.launch();
|
|
const seite = await (await browser.newContext({ deviceScaleFactor: 1 })).newPage();
|
|
|
|
const bb = Math.round(Number(b) * Number(faktor));
|
|
const hh = Math.round(Number(h) * Number(faktor));
|
|
await seite.setViewportSize({ width: bb, height: hh });
|
|
await seite.setContent(`<!doctype html><html><head><meta charset="utf-8"><style>
|
|
html,body{margin:0;width:${bb}px;height:${hh}px;overflow:hidden;background:#101418}
|
|
/* Erst versetzen, dann skalieren -- die Verschiebung rechnet damit in
|
|
den Koordinaten des Originals, nicht in denen der Vergroesserung. */
|
|
.lupe{position:absolute;transform:scale(${Number(faktor)});transform-origin:0 0}
|
|
img{position:absolute;image-rendering:pixelated;
|
|
left:${-Number(x)}px; top:${-Number(y)}px}
|
|
</style></head><body><div class="lupe"><img src="data:image/png;base64,${roh}"></div></body></html>`,
|
|
{ waitUntil: "networkidle" });
|
|
writeFileSync(ziel, await seite.screenshot());
|
|
await browser.close();
|
|
console.log(ziel);
|