Inkscape: SVG-Datei ohne hübschen Druck speichern?

Inkscape: SVG-Datei ohne hübschen Druck speichern?

Ich habe eine SVG-Datei aus Powerpoint erstellt, die ich nun in Inkscape bearbeiten möchte. Wenn ich diese Datei in Inkscape öffne und speichere, ohne Änderungen vorzunehmen, erhöht sich die Dateigröße von 120 kB auf 170 kB (ich speichere sie als einfaches SVG, nicht als Inkscape SVG).

Soweit ich das beurteilen kann, liegt das daran, dass das von Inkscape generierte SVG schön gedruckt ist und daher viele nutzlose Leerzeichen enthält.Gibt es eine Möglichkeit, eine SVG-Datei ohne den hübschen Aufdruck zu speichern?

Beispielsweise dieser Teil der Originaldatei:

<linearGradient x1="272" y1="618" x2="272" y2="643" gradientUnits="userSpaceOnUse" spreadMethod="reflect" id="fill25"><stop offset="0" stop-color="#D2D2D2"/><stop offset="0.5" stop-color="#C8C8C8"/><stop offset="1" stop-color="#C0C0C0"/></linearGradient>

wird gespeichert als

<linearGradient
   id="fill1"
   spreadMethod="reflect"
   gradientUnits="userSpaceOnUse"
   y2="159"
   x2="272"
   y1="134"
   x1="272">
  <stop
     id="stop6277"
     stop-color="#D2D2D2"
     offset="0" />
  <stop
     id="stop6279"
     stop-color="#C8C8C8"
     offset="0.5" />
  <stop
     id="stop6281"
     stop-color="#C0C0C0"
     offset="1" />
</linearGradient>

Antwort1

Gibt es eine Möglichkeit, eine SVG-Datei ohne den hübschen Aufdruck zu speichern?

Mit Vorbehalt sollten Sie sich dieXML-FormatierungOptionen unter derSVG-AusgabeEinstellungen:

zB XML-Formatierung

Inkscape SVG-Ausgabe XML-Formatierung - Screenshot

Diese Optionen sollten verfügbar sein überBearbeiten → Einstellungen → Eingabe/Ausgabe → SVG-Ausgabe → XML-Formatierung. Beachten Sie, dassBearbeiten → Einstellungenist auch über Ctrl++ (wie angegeben) erreichbar .ShiftP

Durch Markieren der Option Inline attributes(oben) sollte z. B. Folgendes beibehalten werden:

<linearGradient
   id="fill1"
   spreadMethod="reflect"
   gradientUnits="userSpaceOnUse"
   y2="159"
   x2="272"
   y1="134"
   x1="272">
  <stop
     id="stop6277"
     stop-color="#D2D2D2"
     offset="0" />
  <stop
     id="stop6279"
     stop-color="#C8C8C8"
     offset="0.5" />
  <stop
     id="stop6281"
     stop-color="#C0C0C0"
     offset="1" />
</linearGradient>

als Beispiel:

<linearGradient x1="272" y1="618" x2="272" y2="643" gradientUnits="userSpaceOnUse" spreadMethod="reflect" id="fill25"><stop offset="0" stop-color="#D2D2D2"/><stop offset="0.5" stop-color="#C8C8C8"/><stop offset="1" stop-color="#C0C0C0"/></linearGradient>

Vorbehalte

  • Bei mit Inkscape bearbeiteten Dateien kann dennoch ein geringer Overhead auftreten, einfach weil Inkscape die Dateien möglicherweise in einem leicht anderen Format als dem Original speichert (selbst bei „plain“ .svg).

  • Bezüglich führender Leerzeichen usw. .svgkönnen „ganze“ Tags für einen übersichtlicheren Ausdruck eingerückt werden, z. B.:

    <g>
        <path fill="#FFFFFF" stroke="#F1F2F2" stroke-width="3" stroke-miterlimit="10" d="M314.267,104.257h-0.006H314.267z"/>
    

Wenn ich mich nicht irre, Indent, spacesscheint die Anpassung derzeit keine Auswirkung auf .svgDateien zu haben, die bereits über eine hübsche Druckeinstellung verfügen, z. B. Tags (d. h. es scheint, als würde diese Option nur auf neue Dateien angewendet).

Wenn Sie sicherstellen möchten, dass führende Leerzeichen usw. entfernt werden, sollten Sie sie wahrscheinlich manuell mit einem Texteditor oder einem Skript entfernen.

  • Sie können einen Texteditor verwenden, wie zum BeispielNotizblock++, um die .svgDatei zu öffnen und wählen SieBearbeiten → Leeroperationen → Führendes Leerzeichen entfernenum führende Leerzeichen zu entfernen. Sie können auchBearbeiten → Zeilenoperationen → Leere Zeilen entfernenum alle Leerzeilen zu entfernen.

  • Sie könnten ein Skript schreiben, um die oben genannten Operationen mit einer oder mehreren .svgDateien in einem bestimmten Verzeichnis durchzuführen. Ein kurzes Beispiel inPython 3:

Beispiel: reduce_svg_files.py

    # Remove leading spaces and blank lines from a set of text files (e.g. ".svg"
    # files) in a directory with Python.

    # Preserves '\n' (linefeed) line endings (for file size considerations) by
    # reading/writing files as "binary".

    # This script would be run in the same directory as the original files.


    # --- Imports ---

    import os
    import os.path
    import sys


    # --- Variables ---

    # Where are the original files located?
    root_dir = '.\\'

    # What is the directory/path to write any reduced files to?
    mini_directory_name = 'mini'
    mini_output_directory = os.path.join(root_dir, mini_directory_name)

    # What file extension should the script work with?
    ext = '.svg'

    # What suffix should be added to the end of any reduced files?
    mini_suffix = ' - mini'


    # --- Main ---

    try:

        # Create the directory specified by "mini_output_directory", as needed.
        os.makedirs(mini_output_directory, exist_ok=True)

        # Read the directory contents (files and folder names) of "root_dir".
        directory_items = os.listdir(root_dir)

        # For every directory item returned...
        for directory_item in directory_items:

            # If that item is a file that also ends with "ext"...
            if os.path.isfile(directory_item) and directory_item.endswith(ext):

                # Create a list to hold the reduced contents of the file.
                svg_contents = []

                # Read the contents of the original file.
                with open(directory_item, 'rb') as svg_file:

                    # For each line in the file...
                    for svg_line in svg_file:

                        # Remove any leading spaces, etc. with ".lstrip()" and
                        # store each "cleaned" line in svg_contents[] (from above).
                        svg_contents.append(svg_line.lstrip())

                    # Then...

                    # Remove the "ext" from the original file name by replacing it
                    # with "nothing".
                    mini_title = directory_item.replace(ext, '')

                    # Add "mini_suffix" and then the "ext" back to the stripped
                    # file name to create the name for the reduced file.
                    mini_file = mini_title + mini_suffix + ext

                    # Create the full path to where the reduced file should be
                    # stored.
                    mini_path = os.path.join(mini_output_directory, mini_file)

                # Write the reduced file to this path.
                with open(mini_path, 'wb') as mini_output_path:
                    mini_output_path.writelines(svg_contents)

    # If there is a problem working with the OS while running the script, catch any
    # error then quit.
    except OSError as err:

        print('')
        print(err)
        sys.exit()

Beachten Sie, dass beide oben genannten Optionen die Formatierung beibehalten, indem sie die Zeilenenden beibehalten. Wie Sie in den Kommentaren anmerken, können Sie, wenn Zeilenenden kein Problem darstellen, (ungefähr) dieselben beiden Schritte wie oben in Notepad++ mit einer Operation ausführen wieBearbeiten → Leervorgänge → Unnötige Leerzeichen und EOL entfernen(Umwandeln aller .svgDateiinhalte in eine einzelne Textzeichenfolge mit Leerzeichen).

Wenn Sie auch die Leerzeichen zwischen den Tags entfernen möchten, können Sie das obige Python-Skript verwenden und Folgendes ändern:

svg_contents.append(svg_line.lstrip())

um einfach:

svg_contents.append(svg_line.strip())

Beachten Sie jedoch, dass diese zweite Option dazu führen kann, .svgdass Ausgabedateien falsch gerendert (und somit unlesbar) werden, wenn jede Zeile nicht aus „ganzen“ <tag>Elementen besteht (stellen Sie also sicher, dass der ursprüngliche .svgDateiinhalt Ihrem gewünschten Inhalt entspricht und nicht der unerwünschten „Elementliste“ in Ihrer ursprünglichen Frage).

verwandte Informationen