- 18 demos aus refactor/didaktik-rewrite-2026 cherry-picked (aliasing-paar, byte-fuer-byte, container-vs-codec, drei-dateien, jpeg-pipeline, kap02-05-eroeffner, kb-vs-kib, nyquist-diagram, pivot-signal-zu-byte, psychoakustik/psychovisualitaet-grafik, raster-vs-vektor, summary-kap02, summary-organizer, usb-c-drei-achsen) - barn-rgb.png + barn-cmyk.png neu generiert (analog zu ybcbr.webp, kanaltrennung mit korrekter k-extraktion) - lv-original-vs-fake.jpg + 02-bild-audio-video.md slides wired up
223 lines
7.4 KiB
HTML
223 lines
7.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>Psychovisualität — Luminanz vor Chrominanz</title>
|
||
<style>
|
||
:root {
|
||
--dark: #1a1a2e;
|
||
--muted: #6b7280;
|
||
--soft: #f8fafc;
|
||
--border: #cbd5e1;
|
||
--hl: #d63384;
|
||
--full: #2563eb;
|
||
--reduced: #7c3aed;
|
||
--y: #1a1a2e;
|
||
--cb: #2563eb;
|
||
--cr: #ef4444;
|
||
--bar-bg: #e2e8f0;
|
||
}
|
||
html, body { margin: 0; padding: 0; background: #fff; font-family: system-ui, -apple-system, sans-serif; color: var(--dark); }
|
||
body { padding: 30px 40px; }
|
||
h1 { text-align: center; margin: 0 0 6px; font-size: 1.75rem; }
|
||
.sub { text-align: center; color: var(--muted); margin-bottom: 24px; font-size: 1.05rem; }
|
||
.sub strong { color: var(--dark); }
|
||
|
||
.compare {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 22px;
|
||
max-width: 1180px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.col {
|
||
border: 2px solid;
|
||
border-radius: 12px;
|
||
padding: 16px 20px;
|
||
background: #fff;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 12px;
|
||
}
|
||
.col.full { border-color: var(--full); }
|
||
.col.reduced { border-color: var(--reduced); }
|
||
|
||
.col-head { display: flex; justify-content: space-between; align-items: baseline; }
|
||
.col-tag {
|
||
font-size: 0.72rem;
|
||
font-weight: 700;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.12em;
|
||
color: var(--muted);
|
||
}
|
||
.col-name { font-size: 1.25rem; font-weight: 700; }
|
||
.col.full .col-name { color: var(--full); }
|
||
.col.reduced .col-name { color: var(--reduced); }
|
||
.col-format {
|
||
font-family: ui-monospace, monospace;
|
||
font-size: 0.82rem;
|
||
color: var(--muted);
|
||
}
|
||
|
||
.preview {
|
||
border-radius: 8px;
|
||
overflow: hidden;
|
||
border: 1px solid var(--border);
|
||
}
|
||
.preview svg { display: block; }
|
||
|
||
.channels {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
}
|
||
.channel { display: grid; grid-template-columns: 90px 1fr 60px; gap: 8px; align-items: center; font-size: 0.85rem; }
|
||
.channel-label {
|
||
font-family: ui-monospace, monospace;
|
||
font-weight: 700;
|
||
}
|
||
.channel-bar { height: 14px; background: var(--bar-bg); border-radius: 3px; overflow: hidden; }
|
||
.channel-bar .fill { height: 100%; border-radius: 3px; }
|
||
.channel-bar .fill.y { background: var(--y); }
|
||
.channel-bar .fill.cb { background: var(--cb); }
|
||
.channel-bar .fill.cr { background: var(--cr); }
|
||
.channel-pct {
|
||
font-family: ui-monospace, monospace;
|
||
font-size: 0.78rem;
|
||
color: var(--muted);
|
||
text-align: right;
|
||
}
|
||
|
||
.summary-line {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
background: var(--soft);
|
||
border-radius: 6px;
|
||
padding: 6px 12px;
|
||
font-family: ui-monospace, monospace;
|
||
font-size: 0.85rem;
|
||
color: var(--dark);
|
||
}
|
||
.summary-line strong { color: var(--hl); }
|
||
|
||
.verdict {
|
||
margin-top: 22px;
|
||
max-width: 1180px;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
text-align: center;
|
||
border: 2px solid var(--hl);
|
||
border-radius: 12px;
|
||
padding: 14px 22px;
|
||
}
|
||
.verdict-q { font-size: 1.1rem; font-weight: 700; color: var(--hl); }
|
||
.verdict-a { font-size: 0.93rem; color: var(--dark); margin-top: 4px; }
|
||
.verdict-a strong { color: var(--hl); }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<h1>Psychovisualität — Luminanz vor Chrominanz</h1>
|
||
<div class="sub">Das Auge sieht <strong>Helligkeit</strong> scharf. <strong>Farbe</strong> darf grob bleiben — und das Bild sieht trotzdem identisch aus.</div>
|
||
|
||
<div class="compare">
|
||
|
||
<div class="col full">
|
||
<div class="col-head">
|
||
<span class="col-name">Ohne Subsampling</span>
|
||
<span class="col-tag">4:4:4</span>
|
||
</div>
|
||
<div class="col-format">jedes Pixel speichert Y · Cb · Cr in voller Auflösung</div>
|
||
|
||
<svg class="preview" viewBox="0 0 320 130" preserveAspectRatio="xMidYMid slice">
|
||
<defs>
|
||
<linearGradient id="full-sky" x1="0" y1="0" x2="0" y2="1">
|
||
<stop offset="0%" stop-color="#fde68a"/>
|
||
<stop offset="55%" stop-color="#fb923c"/>
|
||
<stop offset="100%" stop-color="#7c3aed"/>
|
||
</linearGradient>
|
||
</defs>
|
||
<rect x="0" y="0" width="320" height="130" fill="url(#full-sky)"/>
|
||
<circle cx="230" cy="50" r="22" fill="#fef3c7"/>
|
||
<path d="M0,90 L40,75 L90,87 L140,68 L190,82 L240,66 L290,80 L320,72 L320,130 L0,130 Z" fill="#1e1b4b"/>
|
||
<path d="M0,108 L60,100 L120,108 L180,98 L240,106 L300,98 L320,103 L320,130 L0,130 Z" fill="#0f172a" opacity="0.7"/>
|
||
</svg>
|
||
|
||
<div class="channels">
|
||
<div class="channel">
|
||
<span class="channel-label">Y</span>
|
||
<div class="channel-bar"><div class="fill y" style="width:100%"></div></div>
|
||
<span class="channel-pct">100 %</span>
|
||
</div>
|
||
<div class="channel">
|
||
<span class="channel-label">Cb</span>
|
||
<div class="channel-bar"><div class="fill cb" style="width:100%"></div></div>
|
||
<span class="channel-pct">100 %</span>
|
||
</div>
|
||
<div class="channel">
|
||
<span class="channel-label">Cr</span>
|
||
<div class="channel-bar"><div class="fill cr" style="width:100%"></div></div>
|
||
<span class="channel-pct">100 %</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="summary-line">
|
||
<span>Datenmenge:</span>
|
||
<span><strong>100 %</strong></span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col reduced">
|
||
<div class="col-head">
|
||
<span class="col-name">JPEG · H.264 Standard</span>
|
||
<span class="col-tag">4:2:0</span>
|
||
</div>
|
||
<div class="col-format">Y voll · Cb & Cr nur in 2×2-Pixel-Blöcken</div>
|
||
|
||
<svg class="preview" viewBox="0 0 320 130" preserveAspectRatio="xMidYMid slice">
|
||
<defs>
|
||
<linearGradient id="red-sky" x1="0" y1="0" x2="0" y2="1">
|
||
<stop offset="0%" stop-color="#fde68a"/>
|
||
<stop offset="55%" stop-color="#fb923c"/>
|
||
<stop offset="100%" stop-color="#7c3aed"/>
|
||
</linearGradient>
|
||
</defs>
|
||
<rect x="0" y="0" width="320" height="130" fill="url(#red-sky)"/>
|
||
<circle cx="230" cy="50" r="22" fill="#fef3c7"/>
|
||
<path d="M0,90 L40,75 L90,87 L140,68 L190,82 L240,66 L290,80 L320,72 L320,130 L0,130 Z" fill="#1e1b4b"/>
|
||
<path d="M0,108 L60,100 L120,108 L180,98 L240,106 L300,98 L320,103 L320,130 L0,130 Z" fill="#0f172a" opacity="0.7"/>
|
||
</svg>
|
||
|
||
<div class="channels">
|
||
<div class="channel">
|
||
<span class="channel-label">Y</span>
|
||
<div class="channel-bar"><div class="fill y" style="width:100%"></div></div>
|
||
<span class="channel-pct">100 %</span>
|
||
</div>
|
||
<div class="channel">
|
||
<span class="channel-label">Cb</span>
|
||
<div class="channel-bar"><div class="fill cb" style="width:25%"></div></div>
|
||
<span class="channel-pct">25 %</span>
|
||
</div>
|
||
<div class="channel">
|
||
<span class="channel-label">Cr</span>
|
||
<div class="channel-bar"><div class="fill cr" style="width:25%"></div></div>
|
||
<span class="channel-pct">25 %</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="summary-line">
|
||
<span>Datenmenge:</span>
|
||
<span><strong>50 %</strong></span>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="verdict">
|
||
<div class="verdict-q">Halbe Datenmenge. Identisches Bild — für dein Auge.</div>
|
||
<div class="verdict-a">JPEG, H.264, H.265, WebP — alle reduzieren die Farb-Auflösung auf <strong>ein Viertel</strong>. Das ist Psychovisualität: was wir nicht scharf sehen, muss man nicht scharf speichern.</div>
|
||
</div>
|
||
</body>
|
||
</html>
|