Inkscape: ¿guardar el archivo svg sin una impresión bonita?

Inkscape: ¿guardar el archivo svg sin una impresión bonita?

Tengo un archivo SVG creado desde Powerpoint que ahora quiero editar en Inkscape. Al abrir y guardar ese archivo en Inkscape, sin modificaciones, el tamaño del archivo va de 120 kB a 170 kB (lo estoy guardando como SVG simple, no como Inkscape SVG).

Hasta donde puedo decir, esto se debe a que el SVG generado por Inkscape está bastante impreso y, por lo tanto, tiene muchos espacios en blanco inútiles.¿Hay alguna manera de guardar un archivo SVG sin la letra bonita?

Por ejemplo, esta parte del archivo original:

<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>

se guarda como

<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>

Respuesta1

¿Hay alguna manera de guardar un archivo SVG sin la letra bonita?

Con salvedades, es posible que desee consultar elformato XMLopciones bajo elsalida SVGpreferencias:

ex. formato XML

Formato XML de salida SVG de Inkscape: captura de pantalla

Estas opciones deberían estar disponibles a través deEditar → Preferencias → Entrada/Salida → Salida SVG → Formato XML. Tenga en cuenta queEditar → Preferenciastambién está disponible a través de ++ Ctrl( como se indica).ShiftP

Al marcar la opción para Inline attributes(arriba) se debe mantener, por ejemplo:

<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>

como ej.:

<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>

Advertencias

  • Es posible que aún se apliquen algunos pequeños gastos generales a los archivos editados con Inkscape simplemente porque Inkscape puede guardar los archivos en un formato ligeramente diferente al original (incluso con "normal" .svg).

  • Con respecto a los espacios en blanco iniciales, etc., .svglas etiquetas "completas" pueden tener sangría para una impresión bonita, por ejemplo:

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

Si no me equivoco, el ajuste Indent, spacesactualmente no parece tener ningún efecto en .svgarchivos que ya tienen una impresión bonita, por ejemplo. etiquetas (es decir, parece que esta opción solo se aplica a archivos nuevos).

Si desea asegurarse de que se eliminen los espacios en blanco iniciales, etc., probablemente debería utilizar un editor de texto o un script para eliminarlos manualmente.

  • Podrías utilizar un editor de texto comoBloc de notas++para abrir el .svgarchivo y seleccionarEditar → Operaciones en blanco → Recortar espacio inicialpara eliminar los espacios iniciales. También podrías usarEditar → Operaciones de línea → Eliminar líneas vacíaspara eliminar las líneas en blanco.

  • Podría escribir un script para realizar las operaciones anteriores con uno o más .svgarchivos en un directorio determinado. Por ejemplo, un breve ejemplo enPitón 3:

ex. reducir_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()

Tenga en cuenta que las dos opciones anteriores conservan el formato al conservar los finales de línea. Como señala en los comentarios, si los finales de línea no son un problema, puede realizar (aproximadamente) los mismos dos pasos anteriores en Notepad++ con una sola operación comoEditar → Operaciones en blanco → Eliminar espacios en blanco y EOL innecesarios(convirtiendo .svgel contenido de cualquier archivo en una sola cadena de texto con espacios).

Si también desea eliminar los espacios entre etiquetas, puede usar el script de Python anterior y cambiar:

svg_contents.append(svg_line.lstrip())

para sólo:

svg_contents.append(svg_line.strip())

Sin embargo, tenga en cuenta que esta segunda opción podría provocar que .svglos archivos de salida se procesen incorrectamente (y, por lo tanto, ilegibles) si cada línea no consta de <tag>elementos "completos" (es decir, asegúrese de que el .svgcontenido del archivo original se parezca al contenido deseado, no la "lista de elementos" indeseable en su pregunta original).

información relacionada