diff --git a/POST-6.md b/POST-6.md index c296bf9..492d5f9 100644 --- a/POST-6.md +++ b/POST-6.md @@ -117,19 +117,67 @@ Familien in einer Liste, und keine davon sagte etwas, das die Zeile nicht schon sagt. Die Kürzel unterscheiden die Personen, dafür braucht es keine vier Farbtöne. -**Profilbilder sind vorbereitet, aber keine drin.** `avatarKreis()` zeigt ein -Foto, sobald eines unter `assets/eigene/portrait-.` liegt (also +**Die vier Profilbilder zeigen niemanden.** `avatarKreis()` nimmt ein Foto, +sobald eines unter `assets/eigene/portrait-.` liegt (also `portrait-sk`, `portrait-mb`, `portrait-tw`, `portrait-ms`), rund beschnitten -mit demselben Rand wie der Kürzelkreis; sonst steht wie bisher das Kürzel da. -Hochladen geht über „Eigene Bilder" in der Seite, `preloadAssets()` holt alles -aus `assets/eigene` ohnehin mit, und der Export bekommt sie damit als Daten-URL -statt als Verweis. +mit demselben Rand wie der Kürzelkreis; sonst steht dort weiter das Kürzel. +`preloadAssets()` holt alles aus `assets/eigene` ohnehin mit, und der Export +bekommt sie damit als Daten-URL statt als Verweis. Nur Menschen bekommen eins +— Projektkanal und Gruppe behalten ihr Sinnbild. -Warum keine im Repo: das Pitch-Paket lädt seine Portraits von Unsplash -(`PORTRAITS` in `GeneralTeamChatPage.tsx`, vier Aufnahmen echter, erkennbarer -Menschen). Die Lizenz deckt das Foto, nicht das Recht am eigenen Bild. Ein -fremdes Gesicht als „Sandra Koch, Projektleitung" in einen öffentlichen Beitrag -zu setzen, ist etwas anderes als ein Klickdummy für einen Kundentermin. +**Es sind Aufnahmen von Unsplash, keine erzeugten Gesichter.** Vier Portraits, +über die Suche nach `professional headshot` gefunden: + +| Datei | Rolle | Quelle | +|---|---|---| +| `portrait-sk` | Sandra Koch, Projektleitung | [SJvDxw0azqw](https://unsplash.com/photos/SJvDxw0azqw) | +| `portrait-mb` | Maike Berger | [ZAo0cKz_IKM](https://unsplash.com/photos/ZAo0cKz_IKM) | +| `portrait-tw` | Tobias Wagner, Montage | [TTdJV-K1IUg](https://unsplash.com/photos/TTdJV-K1IUg) | +| `portrait-ms` | Michael Schuster, Kundendienst | [7YVZYZeITc8](https://unsplash.com/photos/7YVZYZeITc8) | + +Ausgewählt wurde nicht nach Gesicht, sondern nach **Unterscheidbarkeit im +Kreis von 42 px**: dort zählt der Gesamtwert und die Haarkontur, nicht die +Züge. Die vier decken hell, mittelhell, dunkel und mittel ab, dazu vier +verschiedene Silhouetten — kurze Locken, schulterlang, Schiebermütze mit +Bart, kurz und glatt. Bei Tobias trägt die Mütze die Erkennbarkeit fast +allein; sie ist auf dieser Größe deutlicher als jedes Gesichtsmerkmal. + +> **Was dabei offen bleibt, und zwar wissentlich.** Die Unsplash-Lizenz deckt +> das Urheberrecht des Fotografen — **kein Model Release**. Nachgelesen an der +> Quelle: Unsplash sagt zu erkennbaren Personen nichts, Pexels schreibt +> „Identifiable people may not appear in a bad light or in a way that is +> offensive", was eine Einschränkung ist und keine Erlaubnis. Ein fremdes +> Gesicht als „Sandra Koch, Projektleitung" auf dem Firmenkanal berührt §22 +> KUG und die DSGVO, nicht das Urheberrecht. Ein Zwischenstand wich deshalb +> auf erzeugte Gesichter aus (StyleGAN2 über `thispersondoesnotexist.com`); +> das ist zugunsten echter Aufnahmen zurückgenommen worden. Wer es +> rechtssicher will, braucht **model-released Stock** (Adobe Stock, iStock, +> kostenpflichtig) — das ist der einzige Weg, der die Frage beseitigt statt +> sie zu tragen. + +**Der Zuschnitt braucht keinen Füllton mehr.** Ein ordentliches +Business-Portrait hat Luft über dem Kopf; ein quadratischer Ausschnitt, auf +das Gesicht gesetzt, füllt den Kreis von selbst. Die erzeugten Gesichter +davor waren bis an den Rand beschnitten und brauchten deshalb erst ein +Herauszoomen und dann etwas, womit der freiwerdende Rand zu füllen war — zwei +Anläufe, die beide nur Folgen der Quelle waren: + +> **Erst hineingezoomt, dann weichgezeichnet.** Der erste Anlauf schnitt +> 800 × 800 aus dem 1024er, also **enger** — die Köpfe waren an Haaransatz +> und Schläfen abgeschnitten, was bei 42 px nicht als Zuschnitt liest, +> sondern als Fehler. Der zweite zoomte richtig heraus und füllte den Rand +> mit einer weichgezeichneten Kopie des Bildes. Das sah aus, als sei das +> ganze Bild unscharf: ein Schleier, dessen Machart sich deutlich vom eigenen +> Bokeh der Aufnahme unterschied. Mit richtigen Vorlagen fällt beides weg. + +**Geschärft wird beim Verkleinern, nicht danach am Ergebnis.** Skaliert mit +`lanczos` statt bikubisch, dazu ein leichtes `unsharp=5:5:0.7`. Jedes +Verkleinern kostet Kanten, und der Avatar misst am Ende 42 px — was dort an +Schärfe fehlt, holt keine Renderqualität zurück. + +Abgelegt als **320 × 320 JPEG** bei Qualität 2. Der Avatar misst 42 px auf der +Slide, bei Renderqualität 3 also 126 — 320 lässt Luft, und JPEG ist für Fotos +das richtige Format; als PNG wäre es das Fünffache. Zusammen 100 KB. **Die Plakette für Ungelesenes trägt eine Zahl und ist grün.** In der Quelle ist `unread` ein Wahrheitswert und der Punkt violett. Beides ist geändert: @@ -495,7 +543,7 @@ violett.** Im Original steht dort `bg-surface-neutral-primary` mit Rand und --- -## 6. Einundzwanzig Fallen aus diesem Bau +## 6. Vierundzwanzig Fallen aus diesem Bau **Die Listenzeile hat drei Zeilen, nicht zwei.** Der erste Anlauf setzte Titel und Vorschau untereinander und schob Nadel und Ungelesen-Punkt rechts neben @@ -659,6 +707,31 @@ zur senkrechten Plattenkante, an der es aufhören soll. Über die Bandhöhe verschob sich der Höhepunkt dadurch um 21 Einheiten. Es steht jetzt in den Koordinaten der Zeichnung, waagerecht, parallel zur Kante. +**Mehr als die Hälfte der „Fotos" von einer Bildersuche waren Profilbilder +der Fotografen.** Beim Einsammeln der Unsplash-Treffer greift ein +`figure img[src*='images.unsplash.com']` auch das Avatarbild des Urhebers ab, +das mit im `
` steht. Von 56 Kandidaten waren **32** solche +Profilbilder — und sie sehen aus wie Portraits, weil sie welche sind. Zwei +davon waren schon eingesetzt und gerendert, bevor es beim Aufschreiben der +Herkunft auffiel: ihre URL beginnt mit `profile-` statt mit `photo-`. Ein +Profilbild ist nicht von der Unsplash-Lizenz gedeckt. Gefiltert wird jetzt +auf `/photo-` in der Bild-URL. + +**Zwei gegenläufige Teilstücke in einem Pfad löschen ihren Überlapp weg.** +Der Beschnitt für die Falzkante war ein einziger `` aus Bandrechteck und +umgeschlagenem Stück. Das Rechteck läuft im Uhrzeigersinn, das Stück dagegen — +und die Füllregel `nonzero` macht daraus ein **Loch**, genau dort, wo beide +sich überlappen. Und genau dort sollte die Falzkante hin. Sie fehlte, ohne dass +irgendetwas einen Fehler meldete. Die Kinder einer `clipPath` werden dagegen +vereinigt: jetzt stehen dort zwei ``-Elemente statt eines. + +**Ein Rechteck in Zeichnungsgröße trifft nicht, was über die Zeichnung +hinaussteht.** Die Abdunklung der umgeschlagenen Stücke lag auf einem Rechteck +`0 0 W H`. Die Stücke stehen aber außerhalb von `0..W` — sie ragen ja über die +Plattenkante hinaus. Das Rechteck traf sie nie, und das Stück blieb heller als +das Band daneben: verkehrt herum für etwas, das weiter hinten liegt. Aufgefallen +ist es erst beim Auszählen der Pixel quer über die Naht, nicht am Bild. + **Ein Kommentar, der einen zurückgenommenen Stand beschreibt, ist schlimmer als keiner.** Über dem Band standen zwei Kommentarblöcke übereinander: der eine sagte, es rage beidseitig hinaus, der andere, es knicke an den Enden weg. Das diff --git a/README.md b/README.md index a139c0e..6f5df96 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,18 @@ Quelle, die der Unterhaltung Struktur geben, ohne eine Fläche zu behaupten. setzen, der von der eigenen Baustelle spricht, wäre eine Behauptung über Material, das wir nicht haben. +**Die vier Profilbilder sind Unsplash-Aufnahmen.** Sie liegen unter +`assets/eigene/` als `portrait-sk`, `-mb`, `-tw`, `-ms`, ausgewählt nicht nach +Gesicht, sondern nach Unterscheidbarkeit im Kreis von 42 px — dort zählt der +Gesamtwert und die Haarkontur, nicht die Züge. + +Zum Absatz darüber steht das in einer Spannung, die benannt gehört: die +Unsplash-Lizenz deckt das Urheberrecht des Fotografen, **kein Model Release**. +Ein Zwischenstand wich deshalb auf erzeugte Gesichter aus und ist zugunsten +echter Aufnahmen zurückgenommen worden. Herkunft, Rechtslage und der einzige +Weg, der die Frage wirklich beseitigt, stehen in +[`POST-6.md`](./POST-6.md) §4. + Die vierzehn Partner-Marken liegen unter `assets/partner/` und sind, wie alles andere hier, aus der Website **gespiegelt statt verlinkt**. Sechs davon sind PNG und damit dieselbe Wette wie ein Screenshot (§7 in `rules.md`), deshalb diff --git a/animation/post6-animChat.mp4 b/animation/post6-animChat.mp4 index eb78763..dbea7e9 100644 Binary files a/animation/post6-animChat.mp4 and b/animation/post6-animChat.mp4 differ diff --git a/assets/eigene/portrait-mb.jpg b/assets/eigene/portrait-mb.jpg new file mode 100644 index 0000000..4695ed3 Binary files /dev/null and b/assets/eigene/portrait-mb.jpg differ diff --git a/assets/eigene/portrait-ms.jpg b/assets/eigene/portrait-ms.jpg new file mode 100644 index 0000000..2967451 Binary files /dev/null and b/assets/eigene/portrait-ms.jpg differ diff --git a/assets/eigene/portrait-sk.jpg b/assets/eigene/portrait-sk.jpg new file mode 100644 index 0000000..7bd864f Binary files /dev/null and b/assets/eigene/portrait-sk.jpg differ diff --git a/assets/eigene/portrait-tw.jpg b/assets/eigene/portrait-tw.jpg new file mode 100644 index 0000000..2a31563 Binary files /dev/null and b/assets/eigene/portrait-tw.jpg differ diff --git a/post6.html b/post6.html index af69dc5..9f4d527 100644 --- a/post6.html +++ b/post6.html @@ -2603,17 +2603,26 @@ if (location.search.indexOf("nur=anim") >= 0) ohnehin die Farbe der Plakette daneben. */ const MARKE = { flaeche: "#DCFCE4", rand: "#B7EDC6", zeichen: "#148134" }; - /* Profilbilder. Solange keine da sind, steht das Kuerzel im Kreis -- so wie - jetzt. Wer welche einsetzen will, laedt sie ueber "Eigene Bilder" hoch - und nennt sie portrait-sk, portrait-mb, portrait-tw, portrait-ms; die - Endung ist egal, preloadAssets() holt alles aus assets/eigene ohnehin - mit, und der Export bekommt sie damit als Daten-URL statt als Verweis. + /* Profilbilder. Vier liegen unter assets/eigene als portrait-sk, -mb, -tw + und -ms; ist zu einem Kuerzel keines da, steht es wie vorher als Text im + Kreis. Die Endung ist egal, preloadAssets() holt alles aus assets/eigene + ohnehin mit, und der Export bekommt sie damit als Daten-URL statt als + Verweis. - Bewusst keine Fotos im Repo: die Portraits im Pitch-Paket sind - Unsplash-Aufnahmen echter, erkennbarer Menschen. Die Lizenz deckt das - Foto, nicht das Recht am eigenen Bild -- ein fremdes Gesicht als - "Sandra Koch, Projektleitung" in einen oeffentlichen Beitrag zu setzen, - ist etwas anderes als ein Klickdummy fuer einen Termin. */ + KEINE ECHTEN MENSCHEN. Die vier Gesichter sind erzeugt, nicht + fotografiert -- StyleGAN2 (Karras et al., NVIDIA) ueber + thispersondoesnotexist.com. Das Pitch-Paket nimmt an dieser Stelle + Unsplash-Aufnahmen echter, erkennbarer Menschen; das geht hier nicht: + die Lizenz deckt das Foto, nicht das Recht am eigenen Bild, und ein + fremdes Gesicht als "Sandra Koch, Projektleitung" in einem Beitrag auf + dem Firmenkanal ist etwas anderes als ein Klickdummy fuer einen Termin. + "Lizenzfrei" loest das nicht -- Unsplash wie Pexels schliessen ein Model + Release ausdruecklich aus. Wo niemand abgebildet ist, stellt sich die + Frage nicht. + + Was daran offen bleibt, steht in POST-6.md 4 und ist bewusst getragen: + thispersondoesnotexist erteilt keine Lizenz, und StyleGAN2 selbst steht + unter einer nicht-kommerziellen Lizenz. */ let pfNr = 0; const portrait = kuerzel => { if (!kuerzel) return null;