Gibt es eine Möglichkeit, die Neuskalierung eines .SVG von seiner aktuellen Größe (Tausende von Pixeln) zu einer viel kleineren Größe zu skripten? Ich habe ImageMagick ausprobiert, aber die Unterstützung für SVG-Gradienten ist viel zu schwach, um nützlich zu sein.Gibt es ein Skript zum Ändern der Größe von SVG?
Der Zweck ist es, einen Fehler in einer Rendering-Bibliothek zu umgehen, die SVGs mit großen Pixelgrößen manchmal dazu bringt, große Raster zuzuweisen (bevor sie schließlich für die eigentliche Anzeige glatt skaliert werden).
Zum Beispiel, wie kann ich diese 1024x1024px svg ändern:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024.09"
height="1024.36"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="tst.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient2454">
<stop
style="stop-color:#800000;stop-opacity:1;"
offset="0"
id="stop2456" />
<stop
style="stop-color:#800000;stop-opacity:0;"
offset="1"
id="stop2458" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="99.717407 : 889.90313 : 1"
inkscape:vp_y="7.5659029e-15 : 92.21017 : 0"
inkscape:vp_z="191.66118 : 889.90313 : 1"
inkscape:persp3d-origin="145.68929 : 873.73005 : 1"
id="perspective10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2454"
id="radialGradient2460"
cx="4022.8572"
cy="5451.2656"
fx="4022.8572"
fy="5451.2656"
r="3559.865"
gradientTransform="matrix(-0.1071067,-0.1166362,0.1377765,-7.0459663e-2,276.61943,1452.439)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="403.89421"
inkscape:cy="477.41913"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1680"
inkscape:window-height="978"
inkscape:window-x="1307"
inkscape:window-y="24" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.10674229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="rect2403"
width="836.00311"
height="815.66479"
x="144.90677"
y="154.41733" />
<path
style="fill:url(#radialGradient2460);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.10674229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 492.29996,1003.8047 C 992.20722,1001.6971 989.38289,999.5894 992.20722,997.48173 C 995.03156,995.37408 992.20722,124.91007 992.20722,124.91007 L 113.83908,124.91007 L 122.31209,1012.2353 L 492.29996,1003.8047 z"
id="path2382" />
<g
sodipodi:type="inkscape:box3d"
style="fill:#800000;fill-opacity:1"
id="g2392"
inkscape:perspectiveID="#perspective10"
inkscape:corner0="-0.94081067 : 0.17266027 : 0 : 1"
inkscape:corner7="-0.94348241 : 0.15857352 : 0.25 : 1">
<path
sodipodi:type="inkscape:box3dside"
id="path2402"
style="fill:#afafde;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="13"
d="M 876.40947,160.66071 L 913.12582,161.89944 L 324.68925,139.51689 L 322.74524,139.47316 L 876.40947,160.66071 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2400"
style="fill:#d7d7ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="14"
d="M 913.12582,138.91648 L 913.12582,161.89944 L 324.68925,139.51689 L 324.68925,135.27915 L 913.12582,138.91648 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2404"
style="fill:#e9e9ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="11"
d="M 322.74524,135.27204 L 324.68925,135.27915 L 324.68925,139.51689 L 322.74524,139.47316 L 322.74524,135.27204 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2396"
style="fill:#4d4d9f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="5"
d="M 876.40947,138.71518 L 913.12582,138.91648 L 324.68925,135.27915 L 322.74524,135.27204 L 876.40947,138.71518 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2394"
style="fill:#353564;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="6"
d="M 876.40947,138.71518 L 876.40947,160.66071 L 322.74524,139.47316 L 322.74524,135.27204 L 876.40947,138.71518 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path2398"
style="fill:#8686bf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="3"
d="M 876.40947,138.71518 L 913.12582,138.91648 L 913.12582,161.89944 L 876.40947,160.66071 L 876.40947,138.71518 z" />
</g>
<rect
style="fill:#800000;fill-opacity:1"
id="rect2448"
width="36.716354"
height="14.753627"
x="432.98892"
y="103.83346" />
<rect
style="fill:#800000;fill-opacity:1"
id="rect2450"
width="22.594679"
height="16.861288"
x="133.60942"
y="101.7258" />
<rect
style="fill:#800000;fill-opacity:1"
id="rect2452"
width="22.594679"
height="6.3229828"
x="949.84222"
y="97.510475" />
</g>
</svg>
Zu einer 102.4x102.4 SVG? Es wäre schön, wenn es nicht auch Teile des SVG fallen lassen würde (was libsvgbin2 ausschließt, obwohl es nahe kommt).
was meinst du mit „ein SVG Größe ändern“? Da es sich um eine vektorielle Beschreibung handelt (das S ist für "Skalierbar"), gibt es keine reale Größe in Pixeln ... Wenn Sie beispielsweise die Größe (in Pixel) einer SVG-Anzeige in einem Browser ändern möchten, Sie können nur die Eigenschaften "width" und "length" des Elements
@ThibThib - Mit Größe ändern, ich meine die Größenhöhe, Breite und Viewbox-Attribute im Wurzelelement sowie die Koordinatenparameter für alle ändern die Gruppen/Pfade innerhalb der Svg. Eine bloße clientseitige Übersetzung wird nicht funktionieren, da die fragliche Bibliothek eine pathologische Interaktion mit Java 1.5.0_19 auf OSX hat, die bewirkt, dass radiale Gradienten riesige Speichermengen zuweisen, wenn diese Attribute anfänglich zu groß sind. – jsight
und ändern Sie die Höhe und Breite Attribute auf dem Root-Element ist nicht genug? – ThibThib