Batch mengkonversi gambar SVG ke ukuran yang diinginkan PNG atau ICO


26

Saya memiliki banyak ikon SVG yang ingin saya gunakan untuk aplikasi saya yang akan dikembangkan di VB.Net 2010, dan karena tidak memiliki dukungan untuk menangani ikon SVG, saya perlu mengubah ikon-ikon itu menjadi PNG atau ICO, dengan lebih disukai resolusi keluaran. Saya telah menemukan alat baris perintah untuk Ubuntu yang disebut rsvgconvert. Apakah kita punya alat seperti itu untuk Windows juga ??

Jawaban:


12

ImageMagick memiliki alat baris perintah yang tersedia untuk Linux dan Windows (dan lainnya). Alat konverter disebut "konversi". Berikut beberapa dokumentasi penggunaan .

Dan di sinilah Anda bisa mendapatkan installer Windows .


Anda juga bisa mendapatkannya melalui Windows Subsystem for Linux (WSL), denganapt install imagemagick
antonyh

(ini berlaku untuk linux, mungkin berlaku untuk windows) jika Anda mengaktifkan -verbose pada IM maka akan muncul bahwa IM itu sendiri menggunakan inkscape untuk membuat file eps menengah. oleh karena itu saya akan menyarankan jawaban @ zetah
-bradley

Berikut ini adalah konverter kecil berbasis ImageMagick untuk Windows: fosshub.com/SVG2PNG.html Sudah lama (dari 2014), tetapi masih berfungsi dan Anda tidak perlu membaca dokumen apa pun.
hari

20

ImageMagick tidak boleh langsung dikaitkan dengan sembarang tugas batch yang melibatkan gambar. Terutama dalam kasus ini di mana ImageMagick adalah solusi buruk untuk konversi SVG.

Lebih baik coba Inkscape di baris perintah:

inkscape in.svg --export-png=out.png


8
Mengapa Anda mengatakan inkscape lebih baik daripada ImageMagick? Saya tidak setuju (atau setuju), hanya ingin tahu untuk detail lebih lanjut.
Sam

Alasannya adalah imageMagick cocok untuk menangani png, jpg dll. Sementara inkscape lebih cocok untuk menangani gambar vektor (svg)
user93

1
Seperti berdiri, ini tidak menjawab pertanyaan tentang konversi batch , bukan?
ATAU Mapper

Sementara jawabannya bekerja, pada Windows InkScape bersikeras untuk menampilkan layar splash yang menarik fokus dengan penundaan, yang membuatnya tidak mungkin untuk menjalankan ini dalam mode batch di latar belakang.
Timwi

@Imwi Itu tidak terjadi di sini. Ingatlah untuk menggunakan -zopsi ini.
Svish

5

Baris perintah tidak berfungsi di luar kotak, ditambah saya ingin 100 file dikonversi. Inilah cara saya membuatnya bekerja dengan windows 7:

  1. instal inkscape - bukan yang portable!

  2. salin semua file svg Anda dalam satu folder, mis. "C: \ svgs \" di sana:

  3. Anda membuat convert.batfile dengan baris ini di dalamnya:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (arahkan ke folder instalasi yang benar):

  4. buka CMD sebagai admin! Untuk melakukannya, tekan tombol WIN, ketik cmd, klik kanan pada "cmd.exe" dan pilih "Run as administrator".

  5. arahkan ke "C: \ svgs \" dan ketik convert.bat - Semua file svg akan dikonversi ke PNG.

  6. Gunakan Windows Explorer untuk mencari file PNG yang dikonversi. Di PC saya mereka berada di folder:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Semoga itu bisa membantu.


Karena resolusi untuk baris perintah hanya dapat ditetapkan sejauh yang saya bisa lihat, saya akhirnya menggunakan alat InkscapeBatch . Di sana saya bisa mengatur DPI untuk meningkatkan semua gambar secara relatif.

Anda perlu menentukan pengaturan yang benar atau itu tidak akan berfungsi. Inilah yang saya lakukan:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Setelah Anda menekan "Selesai", Anda perlu menekan tombol "Mulai batch converter ..." di bilah alat:

masukkan deskripsi gambar di sini


1
Perintah batch Anda mungkin tidak memiliki yang lain %%A(sebagai nama file input). Juga, mengapa Anda menganggap itu hanya berfungsi dalam mode admin?
ATAU Mapper

Jadi bagaimana ini lebih baik daripada menggunakan ImageMagick?
reinierpost

Sayangnya, tautan ini tampaknya telah mati juga. (Agustus 2017)
Ideogram

@Ideogram Saya telah menemukan penyedia unduhan lain. softsea.com/download/InkscapeBatch.html
Kai Noack

untuk menentukan dpi Anda perlu menambahkan opsi ini di --export-dpi=100mana 100 adalah nilai th dari dpi
Xsmael


3

Untuk konversi SVG ke PNG saya menemukan cairosvg ( https://cairosvg.org/ ) berkinerja lebih baik daripada ImageMagick. Langkah-langkah untuk menginstal dan menjalankan semua file di direktori Anda.

pip3 install cairosvg

Buka shell python di direktori yang berisi file .svg Anda dan jalankan:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

Ini juga akan memastikan Anda tidak menimpa file .svg asli Anda, tetapi akan tetap menggunakan nama yang sama. Anda kemudian dapat memindahkan semua file .png Anda ke direktori lain dengan:

$ mv *.png [new directory]

Jawaban ini adalah satu-satunya yang bekerja untuk file SVG saya yang agak besar, terima kasih !!!
Ben Sandeen

1

Setelah bergulat dengan ini selama hampir 2 jam saya puas dengan Inkscape. Karena saya perlu mengonversi banyak file dalam berbagai resolusi, saya membuat skrip Powershell. Dengan 106 SVG, komputer saya membeku sekitar 5 detik, jadi berhati-hatilah saat menggunakan ini.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}

Milik saya membeku selama lebih dari beberapa detik. The &Operator memulai proses baru dan terus segera, sehingga script ini akan membuat sebagai banyak proses inkscape.exe baru Anda memiliki file svg. Ternyata ini membuat komputer Anda cukup lambat untuk sementara waktu.
Rory

Jika Anda meletakkan | Out-Nulldi akhir baris yang dimulai dengan &itu akan memaksanya untuk menjalankan perintah inkscape.exe satu per satu, yang bekerja jauh lebih baik bagi saya.
Rory

1

Anda dapat menggunakan yang berikut ini di Bash / Ubuntu untuk Windows, di folder tempat Anda memiliki SVGs. Namun tampaknya ImageMagick pertama kali merasterisasi kemudian mengubah ukuran, yang menghasilkan artefak aneh ...

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

Lihat juga solusi berbasis Inscape yang tampaknya berfungsi dengan baik (dari utas lainnya, tautan hilang): mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;


1
+1 Saya menggunakannya dengan inkscape dalam versi yang sangat sederhana. find -name "*.svg" -exec inkscape {} -e {}.png \;Meskipun saya lebih suka versi ini: ls | grep ".svg" | xargs -I file inkscape file -e file.pngkarena file diproses secara alfabet - ini tidak terjadi, ketika menggunakanfind
loved.by.Jesus


0

Saya tidak dapat menemukan satu perintah yang berfungsi untuk menjalankan batch jadi saya membuatnya bekerja dengan membuat daftar file dan membuat serangkaian perintah. Instruksi ini harus bekerja untuk semua versi Windows. Semua instruksi pengetikan mengecualikan kutipan dan memasukkan semuanya di antaranya.

Untuk melakukan ini, Anda akan memerlukan Inkscape, MS Excel atau editor spreadsheet yang sebanding dan generator daftar. Ada generator daftar freeware kecil yang hebat di sini: https://www.portablefreeware.com/?id=1171

  • Hardlink, menyalin atau memindahkan semua file svg ke satu folder.
  • Buat daftar file folder itu dan ekspor ke csv.
  • Buka csv di Excel dan hapus semua kolom kecuali kolom nama file. Hapus juga judul kolom seperti [Path] dan teks ringkasan di bagian bawah.
  • Jika nama file belum ada di kolom kedua, potong dan rekatkan di sana.
  • Di sel pertama dari kolom jenis inkscape diikuti oleh spasi dan path folder di mana file svg Anda termasuk trailing backslash (misalnya "inkscape C: \ SVG \"). Kemudian salin sel ini, pilih semua sel di bawahnya yang mendahului nama file dan tempel sehingga mereka semua memiliki teks yang sama.
  • Di kolom ketiga ketik --export-png = di sel pertama diikuti oleh folder tujuan yang ingin Anda simpan. Saya hanya menggunakan folder yang sama. Agar sintaksnya benar, pastikan untuk menambahkan spasi di awal tetapi tetap menyatukan teks (misalnya "--export-png = C: \ PNG \"). Salin dan tempel ini untuk semua baris seperti kolom pertama
  • Salin seluruh kolom kedua dan tempel ke kolom keempat. Dengan kolom keempat yang dipilih Tekan Ctrl + H (Temukan & Ganti). Di bidang isian ketikkan ".svg" Di bidang isikan jenis ".png", lalu pilih Ganti semua.

Jika Anda telah melakukan ini dengan benar, Anda harus memiliki satu baris untuk setiap nama file yang terlihat seperti ini: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ PNG \ | Filename1.png |

  • Di sel pertama dari kolom kelima ketik "= concatenate (a2, b2, c2, d2)". Ini mengasumsikan bahwa kolom tajuk belum dihapus. Nomor sel dalam tanda kurung harus sesuai dengan nomor baris saat ini. Jika nama file pertama Anda adalah B2, rumus di atas akurat. Jika tidak benar, nama sel dalam tanda kurung cocok dengan baris nama file pertama (misalnya a1, b1, c1 ...)
  • Salin dan tempel sel ini untuk mengisi semua di bawahnya seperti kolom 1 dan 3.
  • Sekarang salin seluruh kolom kelima dan gunakan Tempel Spesial> Nilai untuk menempelkan teks yang dihasilkan oleh rumus ke kolom keenam. Kolom keenam ini adalah uang Anda. Salin seluruh kolom keenam, Buka Notepad dan rekatkan kolom terakhir ke dalamnya. Jika Anda telah melakukan ini dengan benar, Anda akan memiliki satu baris perintah untuk mengubah setiap file svg Anda menjadi pngs.
  • Simpan file Notepad ke direktori Inkscape sebagai file batch. Ketika jendela simpan sebagai terbuka, ubah tipe Simpan Sebagai ke "Semua File" dan simpan sebagai file .bat (mis. "C: \ Program Files \ Inkscape \ SVGBatch.bat"
  • Yang perlu dilakukan adalah masuk ke folder itu dan klik dua kali pada file batch yang baru saja Anda simpan. Itu harus membuka prompt perintah dan mengkonversi semua file.

Semoga itu membuat hidup seseorang lebih mudah. James


0

Jawaban Kai dekat, tetapi tidak berhasil untuk saya. Namun, dengan sedikit perubahan, ini bekerja tanpa cacat pertama kali:

  1. Salin SVG Anda ke lokasi yang berguna
  2. Buat file teks dalam folder yang sama dan ganti namanya convert.bat
  3. Buka convert.batdi editor teks / kode favorit Anda dan masukkan yang berikut ini:

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(Perhatikan bahwa inkscape.exelokasi harus sesuai lokasi program executable pada PC Anda, dan yang kedua sebelum --export-pngadalah %%A- yang file SVG makhluk dikonversi)

  1. Klik dua kali convert.batuntuk menjalankan, dan itu akan menggemakan hasil konversi.

Perhatikan bahwa Anda mungkin perlu me-refresh folder Windows Anda untuk melihat file baru, tetapi semuanya harus dibuat di lokasi yang sama dengan SVG asli.


0

Tidak dapat mengaktifkan imagemagick atau inkscape untuk saya karena suatu alasan. Saya hanya punya 12 file untuk dikonversi yang baru saja menggunakan situs ini secara manual: http://svgtopng.com/ berhasil.


0

Berikut ini adalah solusi berbasis ImageMagick untuk mengonversi semua file svg di direktori tertentu ke file ico:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Penjelasan:

  • mogrify: Suka convert, tetapi memungkinkan Anda untuk mengolah banyak file.
  • -format ico: Format file target kami. Membuat .icofile alih-alih menimpa file asli (seperti yang dilakukan mogrif secara default).
  • -density 1200: Karena kita tidak dapat menentukan ukuran piksel target yang harus di-ImageMagick oleh Rasterize SVG (pertama-tama akan melakukan rasterisasi dengan kepadatan default dan kemudian skala), kami merasterisasi SVG dengan resolusi sangat tinggi (1200dpi), untuk memastikan bahwa gambar tersebut akan downscaled untuk 256x256 bukan upscaled.
  • -background transparent: Latar belakang akan dibuat transparan.
  • -trim: Hapus batas yang ada di sekitar gambar.
  • -resize 256x256: Skala gambar, memastikan bahwa sisi terpanjang memiliki 256px, menjaga aspek rasio.
  • -gravity center -extent 256x256: Perbesar kanvas, pastikan sisi pendeknya memiliki 256px juga. Gambar yang ada selaras tengah. Ini diperlukan karena kami memerlukan gambar persegi sebagai dasar untuk file ICO.
  • -define icon:auto-resize: Sertakan tidak hanya gambar 256x256 tetapi juga semua resolusi downscaled yang disarankan (misalnya 32x32) dalam file ICO.

0

Sebagian besar jawaban yang diberikan di sini mengabaikan ukuran pertanyaan yang diinginkan . Saya tidak bisa mendapatkan hasil yang memuaskan menggunakan convertketika "meningkatkan" SVG. inkscapemelakukan pekerjaan yang lebih baik dan juga menjaga transparansi latar belakang.

Tergantung pada kasus penggunaan Anda, gunakan salah satu opsi berikut:

  1. ekspor pada DPI yang ditentukan: inscape in.svg -d 300 -e out.png
  2. ekspor pada lebar tertentu (mempertahankan rasio aspek): inscape in.svg -w 800 -e output.png
  3. ekspor pada ketinggian tertentu (mempertahankan rasio aspek): inscape in.svg -h 600 -e output.png

Perhatikan bahwa menentukan lebar dan tinggi tidak mempertahankan rasio aspek.

Untuk mengonversi banyak file sekaligus, sesuaikan berikut ini dengan use case Anda (dalam bashatau yang kompatibel):

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.