SVG'leri PNG'lere toplu olarak dışa aktarmanın bir yolu var mı?


18

Ben bu SVGS var ve ben onları PNG görüntüleri vermek istiyorum, ben Inkscape ile onları ihracat olabilir ama bu her dosyayı açmak ve verimli olmayan bu PNG ihracat (yüzlerce var) anlamına gelir.

Bunu nasıl yapabilirim?

Yanıtlar:


16

Daha önce kabul edilen cevaptan esinlenerek bu tek astarı buldum:

Inkscape sürüm 0.92.4 ve öncesi için:

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

Bu şekilde bir komut dosyası çağırmanıza gerek kalmaz. İsterseniz, geçerli dizindeki tüm svg'leri png'lere dönüştürmek için bir takma ad oluşturabilirsiniz:

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

Inkscape sürüm 1.0 Beta ve sonraki sürümleri için:

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

Bu şekilde bir komut dosyası çağırmanıza gerek kalmaz. İsterseniz, geçerli dizindeki tüm svg'leri png'lere dönüştürmek için bir takma ad oluşturabilirsiniz:

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

1
${file%svg}pngharika bir numara! Bunu daha önce görmemiştim.
Chester

Bunun dosya adlarındaki boşluklarla çalışmadığını düşünüyorum.
Genom

26

Görünüşe göre Inkscape'i komut satırından kullanabilirsiniz:

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

daha fazla detay

Tüm SVG dosyalarını işlemek için basit bir bash betiği yazabileceğinizi düşünüyorum:

#!/bin/sh

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

yukarıdaki örnek, çıktı dosyalarına .png uzantısı ekleyerek geçerli dizindeki tüm .svg dosyalarını dönüştürür.


Birkaç yüz svgs ihraç etmeye çalışıyorum, nasıl ihracat değerini (dest) böylece adını tutmak için nasıl ayarlayabilirim? çünkü bu küçük bir miktar için iyi çalışıyor gibi görünüyor.
Uri Herrera

@UriHerrera: Cevabı güncelledim
Sergey

tüm dosyalar {dosya} .png yerine {dosya} .svg.png biçiminde kaydedilir? nasıl düzeltebilirim? Ayrıca orijinal SVG'de sağ altta PNG'ye dönüştürüldüğünde kaybolan küçük kısayol simgesi görünüyor (simgeler paketini dönüştürmeye çalışıyorum)
Tosho

@Tosho Şu anda Windows'dayım, ancak bunun gibi bir şey olmalı: pastebin.com/TEDfvxPC
user31389

2
@ Tosho da yapabilirsiniz ${file%svg}png. Sen okuyabilir burada daha olanakları için.
jja

5

Grafik Nautilus Komut Dosyası


genel bakış

Komut satırı toplu dönüşümler için harikadır, ancak bazen GUI'nizin rahatlığını bırakmak istemezsiniz. Bu yüzden SVG dosyalarını PNG görüntülerine dönüştürmek için GUI tabanlı bir Nautilus betiği kodladım. Özel eylemleri olan diğer dosya yöneticileri de (örneğin Thunar) desteklenmelidir.

Ekran görüntüsü

resim açıklamasını buraya girin

Senaryo

#!/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) /ubuntu/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

Bu yanıtı güncel tutmaya çalışacağım, ancak komut dosyasının en son sürümü için lütfen Github veri havuzuma göz atın .

Kurulum

Tüm Nautilus komut dosyaları için genel kurulum talimatları burada bulunabilir . Aşağıdaki komutlar gerekli tüm bağımlılıkları kapsamalıdır:

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

Daha fazla bilgi için lütfen yukarıdaki kod başlığına bakın.

kullanım

Komut dosyasını yükledikten sonra dosya yöneticinizin bağlam menüsünden çağırabilirsiniz. Sadece bir veya daha fazla SVG dosyası seçin ve içerik menünüzdeki uygun girişi tıklayın. Bir GUI iletişim kutusu, dönüşüme ilişkin çeşitli seçeneklerle gelmelidir.

SVG'yi DPI veya genişliğe göre dönüştürebilirsiniz. En boy oranı her iki durumda da korunacaktır. Dönüşüm düğmelerini tıklamadan önce DPI veya seçim genişliğinizi sağladığınızdan emin olun.

Ayrıca, SVG dosyasının tamamını veya yalnızca kırpılmış çizimi dışa aktarma arasında seçim yapabilirsiniz. SVG tuvalinizde çok fazla boş alan varsa, dışa aktarma seçeneği olarak "Çizim" i seçmeniz önerilir.


2

İşte daha okunabilir bir kodlama dilinde biraz farklı bir alternatif çözüm - python. Tüm svgs toplu ihracat yapabilirsiniz. Android dev yapıyorsanız ve tek bir svg'den birden fazla png yapmak zorundaysanız özellikle idealdir.

Feragatname: Lib'i yazdım. Umarım birine yardımcı olur.

Click burada .

Basit bir kullanım için, kütüphaneyi bir klasöre indirin, svgs'yi aynı klasöre koyun, ardından çalıştırın

python exporter.py

sonra komut satırına / terminaline gidin cd. Daha gelişmiş seçenekler için README'ye bakın .


Teşekkürler David, daha fazla ayrıntı sağlamak için cevabımı düzenledim!
Kevin Lee

1

Tüm dosyalar, varsa ama sadece belirli SVG dosyaları PNG dönüştürülmesi gerekir, tek olabilir kullanmak sedotomatik dosya adları oluşturmak için:

inkscape --without-gui --export-width=1280 --export-png=`echo $1 |sed -e 's/svg$/png/'` $1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.