Stattdessen gibt es eine bessere Lösung:
Gehen Sie zu Extensions -> Images -> Extract Image...
, dort können Sie das ausgewählte Rasterbild als Datei speichern. Allerdings funktioniert diese Erweiterung seltsam und irgendwie ziemlich langsam (aber vollkommen gut).
Noch ein Hinweis: Diese Erweiterung ist umständlich und stirbt lautlos bei unterschiedlich großen Bildern. Mit einer großen Anzahl von Rasterbildern kann die Speichernutzung von inkscape auf entsetzliche Ebenen gesteigert werden (z. B. 3 GB nach nur einer Handvoll extrahierter Bilder).
Da ich ungefähr 20 SVG-Dateien mit jeweils ungefähr 70 Rasterbildern habe, von denen jedes mindestens 1 MB groß ist, brauchte ich eine andere Lösung. Nach einer kurzen Überprüfung mit Denilson Sá tip habe ich das folgende PHP-Skript entwickelt, das Bilder aus SVG-Dateien extrahiert:
#!/usr/bin/env php
<?php
$svgs = glob('*.svg');
$existing = array();
foreach ($svgs as $svg){
mkdir("./{$svg}.images");
$lines = file($svg);
$img = 0;
foreach ($lines as $line){
if (preg_match('%xlink:href="data:([a-z0-9-/]+);base64,([^"]+)"%i', $line, $regs)) {
$type = $regs[1];
$data = $regs[2];
$md5 = md5($data);
if (!in_array($md5, $existing)) {
$data = str_replace(' ', "\r\n", $data);
$data = base64_decode($data);
$type = explode('/', $type);
$save = "./{$svg}.images/{$img}.{$type[1]}";
file_put_contents($save, $data);
$img++;
$existing[] = $md5;
}
} else {
$result = "";
}
}
}
echo count($existing);
Auf diese Weise kann ich alle gewünschten Bilder abrufen, und md5 erspart mir das wiederholte Abrufen von Bildern.
Ich wette, es muss einen anderen Weg geben, der viel einfacher ist, aber es liegt an den inkscape-Entwicklern, es besser zu machen.