std.svg.image
Bilder in ein SVG einbetten. Alle Wege kodieren die Daten als Base64-Data-URI — eine Referenz auf eine externe Datei gibt es nicht.
Zwei Muster:
SvgImageFileschreibt das Bild einmal an Ort und Stelle in den Rumpf.SvgAddImageJpeg/SvgAddImagePng/SvgAddImageRGBlegen es in<defs>ab und liefern eine Bildnummer;SvgDrawImageundSvgDrawImageFitsetzen es danach beliebig oft ein.
→ std.svg · std.svg.builder · std.svg.defs
Verwendung
import std.io;
import std.alloc;
import std.svg.builder;
import std.svg.elements;
import std.svg.image;
fn main(): int64 {
var doc: int64 := SvgNew(400.0, 300.0);
SvgSetPrettyPrint(doc, 1);
// Datei lesen und an dieser Stelle einbetten (JPEG/PNG per Magic Bytes)
SvgImageFile(doc, "logo.png", 50.0, 50.0, 200.0, 150.0);
// RGB-Rohdaten: drei Byte je Pixel, zeilenweise
var px: int64 := alloc(12);
poke8(px, 255); poke8(px + 1, 0); poke8(px + 2, 0);
poke8(px + 3, 0); poke8(px + 4, 255); poke8(px + 5, 0);
poke8(px + 6, 0); poke8(px + 7, 0); poke8(px + 8, 255);
poke8(px + 9, 255); poke8(px + 10, 255); poke8(px + 11, 0);
var img: int64 := SvgAddImageRGB(doc, px, 2, 2); // liefert die Bildnummer
SvgDrawImage(doc, img, 10.0, 10.0, 32.0, 32.0);
SvgDrawImageFit(doc, img, 300.0, 10.0, 64.0, 64.0);
Print(SvgToString(doc)); Print("\n");
SvgFree(doc);
return 0;
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="300">
<defs>
<image id="img0" href="data:image/png;base64,iVBORw0KGgo…"/>
</defs>
<image href="data:image/png;base64,iVBORw0KGgo…"/>
<use href="#img0" x="10" y="10" width="32" height="32"/>
<use href="#img0" x="300" y="10" width="64" height="64"/>
</svg>
(Die Base64-Ströme sind hier gekürzt.)
Ist die Datei nicht lesbar, tut SvgImageFile nichts und meldet nichts — der Aufruf hinterlässt keine Spur im Dokument. Ein Blick auf die Ausgabe ist damit die einzige Prüfung.
Funktionen
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
SvgImageFile(doc: int64, path: pchar, x: f64, y: f64, w: f64, h: f64): void | pub | Datei lesen und an dieser Stelle als Data-URI einbetten |
SvgAddImageJpeg(doc: int64, path: pchar): int64 | pub | JPEG in <defs> ablegen, liefert die Bildnummer |
SvgAddImagePng(doc: int64, path: pchar): int64 | pub | PNG in <defs> ablegen |
SvgAddImageRGB(doc: int64, ptr: int64, w: int64, h: int64): int64 | pub | RGB-Rohdaten zu PNG wandeln und ablegen |
SvgDrawImage(doc: int64, imgId: int64, x: f64, y: f64, w: f64, h: f64): void | pub | Abgelegtes Bild einsetzen |
SvgDrawImageFit(doc: int64, imgId: int64, x: f64, y: f64, mw: f64, mh: f64): void | pub | Einsetzen und in den Rahmen einpassen |
Nicht vorhanden: SvgImageEmbed, SvgImageBase64, SvgImageFromRGB, SvgImageSymbol, SvgBase64Encode und SvgPngFromRGB — frühere Fassungen dieser Seite führten sie samt Style-Parameter auf.
Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben; Beispiel mit lyxc 1.1.3I übersetzt und gegen ein erzeugtes 2×2-PNG ausgeführt, Ausgabe übernommen (Base64 gekürzt).
