Pertanyaan Apakah ada cara untuk mengekspor ekspor SVG ke PNG?


Saya memiliki SVGS ini dan saya ingin mengekspornya ke gambar PNG, saya bisa mengekspornya dengan Inkscape tetapi itu berarti membuka setiap file dan mengekspor file itu ke PNG yang tidak efisien (saya punya ratusan).

Bagaimana saya bisa melakukan ini?


15
2017-10-30 03:46


asal




Jawaban:


Maaf untuk necroposting, tetapi hari ini saya mencari solusi dan terinspirasi oleh jawaban yang diterima. Saya datang dengan kalimat satu ini:

for file in *.svg; do inkscape $file -e ${file%svg}png; done

Dengan cara ini Anda tidak perlu memanggil skrip. Jika Anda ingin, Anda bisa membuat alias untuk mengkonversi semua SVS dalam direktori saat ini ke pngs:

alias svgtopng='for file in *.svg; do inkscape $file -e ${file%svg}png; done'

11
2017-12-15 10:16



${file%svg}png adalah trik hebat! Saya belum pernah melihat itu sebelumnya. - Chester


Tampaknya Anda dapat menggunakan Inkscape dari baris perintah:

`#{INKSCAPE_PATH} -z -f #{source_svg} -w #{width} -j -e #{dest_png}`

keterangan lebih lanjut

Saya membayangkan Anda dapat menulis skrip bash sederhana untuk memproses semua file SVG:

#!/bin/sh

for file in *.svg
do
     /usr/bin/inkscape -z -f "${file}" -w 640 -e "${file}.png"
done

contoh di atas mengubah semua file .svg di direktori saat ini, menambahkan ekstensi .png ke file output.


22
2017-10-30 04:10



Saya mencoba untuk mengekspor beberapa ratusan SVS, bagaimana saya bisa mengatur nilai ekspor (dest) sehingga mereka menyimpan nama mereka? karena ini tampaknya berfungsi dengan baik untuk kuantitas kecil. - Uri Herrera
@UriHerrera: Saya memperbarui jawabannya - Sergey
Ya, terima kasih banyak. - Uri Herrera
semua file disimpan {file} .svg.png format, bukan {file} .png? bagaimana cara memperbaikinya? dan juga pada SVG asli, muncul ikon pintasan kecil di kanan bawah yang menghilang saat dikonversi ke PNG (Saya mencoba mengonversi paket ikon) - Tosho
@Tosho Anda juga bisa melakukannya ${file%svg}png. Kamu bisa membaca sini untuk lebih banyak kemungkinan. - jja


Naskah Nautilus Grafis


Ikhtisar

Baris perintah sangat bagus untuk konversi batch tetapi terkadang Anda tidak ingin meninggalkan kenyamanan GUI Anda. Itu sebabnya saya mengkodekan script Nautilus berbasis GUI ke batch mengkonversi file SVG ke gambar PNG. Pengelola file lainnya dengan tindakan khusus (misalnya, Thunar) juga harus didukung.

Screenshot

enter image description here

Naskah

#!/bin/bash

# NAME:         SVG2PNG
# VERSION:      0.1
# AUTHOR:       (c) 2014 Glutanimate (https://github.com/Glutanimate)
#
# DESCRIPTION:  Simple application to convert SVG files to PNG files based on DPI or resolution. 
#               Designed to work as a context menu script in file managers like Nautilus and Thunar.
#
# FEATURES:     - Converts SVG image file to PNG raster of a specific DPI or width
#               - SVG preview
#               - choose between converting the full SVG page or only the cropped image
#
# DEPENDENCIES: inkscape imagemagick yad
#               YAD (1) is an advanced for of Zenity with many improvements. It's not included in the
#               official Ubuntu repos yet (2) but can be installed from a webupd8 PPA (3)
#
# LICENSE:      MIT license (http://opensource.org/licenses/MIT)
#
# NOTICE:       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
#               INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
#               PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
#               LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
#               TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
#               OR OTHER DEALINGS IN THE SOFTWARE.
#
#
# USAGE:        SVG2PNG image1.svg image2.svg [..]
#               I recommend installing this script as a context menu action for your file manager.
#               Instructions for Nautilus may be found on AskUbuntu (4).
#
# NOTES:        The script uses convert for previews because it's faster. For optimal results
#               the actual conversion is done with inkscape's command line interface.
#
# LINKS:        (1) https://code.google.com/p/yad/
#               (2) https://bugs.launchpad.net/ubuntu/+bug/796633
#               (3) https://launchpad.net/~webupd8team/+archive/y-ppa-manager
#               (4) https://askubuntu.com/questions/236414/how-can-i-install-a-nautilus-script

############## DIALOGS ###################

TITLE="SVG to PNG"
ICON="svg"

############## USGCHECKS #################

# checks if user selected an item

if [ $# -eq 0 ]
  then
      yad --title="$TITLE" \
          --image=dialog-error \
          --window-icon=dialog-error \
          --class="$WMCLASS" \
          --text="Error: no file selected" \
          --button="Ok":0
      echo "Error: no file selected"
      exit
fi

############### GLOBVAR ##################

SVGFILES="$@"
TEMPDIR=$(mktemp -d)
PREVIEWIMG="$TEMPDIR/svgpreview.png"

############### CLEANUP ##################

trap "rm -r $TEMPDIR" EXIT 

############## FUNCTIONS #################

converttosvg_dpi(){

echo "Converting based on DPI."

while [ $# -gt 0 ]; do

    echo "$# file(s) left to convert."
    SVGFILE="$1"
    FILESTEM="${SVGFILE%%.*}"
    PNGFILE="$FILESTEM".png
    inkscape "$SVGFILE" -z --export-dpi="$DPI" \
    --"$AREASETTING" --export-png="$PNGFILE"
    shift

done
echo "Done."

}

converttosvg_res(){

echo "Converting based on Width."

while [ $# -gt 0 ]; do

    echo "$# file(s) left to convert."
    SVGFILE="$1"
    FILESTEM="${SVGFILE%%.*}"
    PNGFILE="$FILESTEM".png
    inkscape "$SVGFILE" -z --export-width="$WIDTH" \
    --"$AREASETTING" --export-png="$PNGFILE"
    shift

done
echo "Done."

}

createpreview() {
convert -resize 128x "$1" "$PREVIEWIMG"
}

getsettings() {

SETTINGS=$(yad --window-icon "$ICON" --image "$PREVIEWIMG" --width 300 --height 200 --always-print-result \
--form --separator="|" --title="$TITLE" --text "Please choose the DPI or resolution to convert to." \
--field="DPI:NUM" 10[!80..600[!10]] --field="Width in px:NUM" 16[!16..4096[!16]] \
--field="Area:":CB "Drawing"\!"Page" \
--button="Convert based on DPI:2" --button="Convert based on Resolution:3" --button="gtk-cancel:1")

RET=$? # Exit code?

if [ "$RET" = 252 ] || [ "$RET" = 1 ]  # WM-Close or "Abort"
  then
      echo "Exiting..."
      exit
fi

DPI=$(printf %.0f $(cut -d "|" -f 1 <<<"$SETTINGS")) #round values
WIDTH=$(printf %.0f $(cut -d "|" -f 2 <<<"$SETTINGS"))
AREA=$(cut -d "|" -f 3 <<<"$SETTINGS")

case "$AREA" in

Drawing)
  AREASETTING="export-area-drawing"
  ;;

Page)
  AREASETTING="export-area-page"
  ;;

esac

echo "DPI set to $DPI"
echo "Width set to $WIDTH"
echo "Area set to $AREA"

}


################ MAIN ####################

createpreview "$1"
getsettings

case "$RET" in

2)
  echo 2
  converttosvg_dpi "$@"
  ;;

3)
  echo 3
  converttosvg_res "$@"
  ;;

esac

exit 0

Saya akan mencoba untuk menjaga jawaban ini diperbarui tetapi silakan periksa Github repositori untuk versi skrip terbaru.

Instalasi

Petunjuk instalasi generik untuk semua skrip Nautilus dapat ditemukan sini. Perintah berikut harus mencakup semua dependensi yang diperlukan:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad inkscape imagemagick

Untuk informasi lebih lanjut silakan baca tajuk skrip di atas.

Pemakaian

Setelah menginstal skrip Anda harus dapat memohonnya dari menu konteks manajer file Anda. Cukup pilih satu atau lebih file SVG dan klik pada entri yang sesuai di menu konteks Anda. Dialog GUI akan muncul dengan beberapa opsi yang mengkonsultasikan konversi.

Anda dapat mengonversi SVG berdasarkan DPI atau lebar. Rasio aspek akan dilestarikan pada kedua kasus. Pastikan untuk menyediakan DPI atau lebar pilihan Anda sebelum mengklik tombol konversi.

Anda juga dapat memilih antara mengekspor file SVG lengkap atau hanya gambar yang dipotong. Jika kanvas SVG Anda memiliki banyak ruang kosong, disarankan untuk memilih "Menggambar" sebagai opsi ekspor.


5
2018-01-29 13:47





Inilah solusi alternatif yang sedikit berbeda dalam bahasa scripting yang lebih mudah dibaca - python. Ini dapat mengirim ekspor ke semua svgs Anda. Sangat ideal jika Anda melakukan Android dev dan harus membuat beberapa pngs dari svg tunggal.

Disclaimer: Saya menulis lib. Semoga itu membantu seseorang.

Klik sini.

Untuk penggunaan yang mudah, unduh pustaka ke dalam folder, letakkan svgs di folder yang sama, lalu jalankan

python exporter.py

di baris perintah / terminal setelah Anda cd ke folder. Untuk opsi lanjutan lainnya, lakukan periksa Baca aku.


2
2018-03-28 07:45



Terima kasih David, saya telah mengedit jawaban saya untuk memberikan detail lebih lanjut! - Kevin Lee


Jika tidak semua file, tetapi hanya file SVG tertentu yang perlu dikonversi ke PNG, mungkin menggunakan seduntuk secara otomatis menghasilkan nama file:

inkscape --without-gui --export-width=1280 --export-png=`echo $1 |sed -e 's/svg$/png/'` $1

1
2018-06-22 13:23