Zamiast tego istnieje lepsze rozwiązanie:
przejdź do Extensions -> Images -> Extract Image...
, tam możesz zapisać wybrany obraz rastrowy jako plik. Jednak to rozszerzenie działa dziwnie i jakoś działa raczej powoli (ale idealnie dobrze).
Kolejna uwaga: to rozszerzenie jest nieporęczne i umiera cicho na różnych dużych obrazach. Ponadto przy dużej liczbie obrazów rastrowych może zwiększyć wykorzystanie pamięci Inkscape do przerażających poziomów (jak 3 GB po wyodrębnieniu tylko kilku zdjęć).
Ponieważ mam około 20 plików SVG z około 70 obrazami rastrowymi, każdy obraz o wielkości co najmniej 1 MB, potrzebowałem innego rozwiązania. Po krótkim sprawdzeniu za pomocą końcówki Denilson Sá opracowałem następujący skrypt php, który wyodrębnia obrazy z plików svg:
#!/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);
W ten sposób mogę uzyskać wszystkie potrzebne obrazy, a md5 ratuje mnie przed powtarzaniem się.
Założę się, że musi być inny sposób, który jest o wiele prostszy, ale twórcy inkscape muszą to zrobić lepiej.