Toplu, SVG görüntülerini istenen boyut PNG veya ICO'ya dönüştürür


26

Uygulamamın VB.Net 2010'da geliştirilebilmesi için kullanmak istediğim birçok SVG ikonuna sahibim ve SVG ikonlarını kullanma konusunda bir desteği olmadığı için bu ikonları PNG veya ICO'ya dönüştürmem gerekiyor. çıkış çözünürlüğü Ubuntu için böyle bir komut satırı aracı buldum rsvgconvert. Windows için de böyle bir aracımız var mı?

Yanıtlar:


12

ImageMagick Linux ve Windows (ve diğerleri) için kullanılabilen bir komut satırı aracına sahiptir. Dönüştürücü aracı uygun olarak "dönüştür" olarak adlandırılır. İşte bazı kullanım belgeleri .

Ve burada bir Windows yükleyici alabileceğiniz yer .


Ayrıca, ile Linux (WSL) Windows Subsystem yoluyla alabilirsinizapt install imagemagick
antonyh

(bu linux için geçerlidir, pencereler için geçerli olabilir) IM'de -verbose'u açarsanız IM'in bir ara eps dosyası oluşturmak için inkscape kullandığı görülecektir. bu nedenle @ zetah'ın cevabını önerebilirim
kuzey-bradley

İşte Windows için küçük bir ImageMagick tabanlı dönüştürücü: fosshub.com/SVG2PNG.html Eski (2014'ten beri), ancak hala çalışıyor ve herhangi bir dokümanı okumak zorunda değilsiniz.
8 günlük

20

ImageMagick hemen görüntü içeren herhangi bir toplu işle hemen ilişkilendirilmemelidir. Özellikle ImageMagick'in SVG dönüşümü için zayıf bir çözüm olduğu durumlarda.

Komut satırında Inkscape'i denemek daha iyi :

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


8
Neden inkscape'in ImageMagick'ten daha iyi olduğunu söylüyorsunuz? Katılmıyorum (ya da katılmıyorum), sadece daha fazla ayrıntıyı merak ediyorum.
Sam,

Imagemagick olmanın sebebi daha iyi sap png, için uygundur jpg vb .. inkscape daha iyi (svg) sap vektör görüntüleri için uygundur iken
user93

1
Halen toplu dönüştürme ile ilgili soruya cevap vermiyor, değil mi?
VEYA Mapper,

Cevap çalışırken, Windows InkScape'te gecikmeli bir odaklamalı açılış ekranı gösterme konusunda ısrarcı olunca, bu işlem arka planda toplu modda çalıştırılmasını imkansız hale getirir.
Timwi

@Timwi Bu burada olmaz. Sadece -zseçeneği kullanmayı unutmayın .
Svish

5

Komut satırı kutunun dışında çalışmadı, ayrıca 100 dosyanın dönüştürülmesini istedim. Windows 7 ile çalışmasını şöyle yaptım:

  1. inkscape'i yükleyin - taşınabilir olanı değil!

  2. tüm svg dosyalarınızı tek bir klasöre kopyalayın, örneğin "C: \ svgs \":

  3. convert.batBu satırın içinde bir dosya oluşturursunuz :

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

    (kurulumunuzun doğru klasörüne gelin):

  4. CMD'yi yönetici olarak aç! Bunu yapmak için, WIN tuşuna basın, cmd yazın, "cmd.exe" üzerine sağ tıklayın ve "Yönetici olarak çalıştır" ı seçin.

  5. "C: \ svgs \" konumuna gidin ve yazın convert.bat - Tüm svg dosyaları PNG'lere dönüştürülür.

  6. Dönüştürülmüş PNG dosyalarını aramak için Windows Gezgini'ni kullanın. Benim bilgisayarımda onlar klasörün içindeydiler:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Umarım yardımcı olur.


Komut satırı çözünürlüğü yalnızca görebildiğim kadarıyla sabitlenebildiğinden, InkscapeBatch aracını kullandım . Orada tüm görüntüleri nispeten artıracak şekilde ayarlayabilirim.

Doğru ayarları belirlemeniz gerekir, aksi takdirde çalışmaz. İşte yaptığım şey:

görüntü tanımını buraya girin

görüntü tanımını buraya girin

"Son" tuşuna bastıktan sonra, araç çubuğundaki "Toplu dönüştürücüyü başlat ..." düğmesine basmanız gerekir:

görüntü tanımını buraya girin


1
Toplu iş komutunuz muhtemelen başka birinden %%A(giriş dosya adı olarak) yoksundur . Ayrıca, neden sadece yönetici modunda çalışması gerektiğini düşünüyorsunuz?
VEYA Eşleştiricisi

Peki bu nasıl ImageMagick kullanmaktan daha iyi?
reinierpost

Ne yazık ki, bu bağlantı da ölmüş gibi görünüyor. (Ağustos 2017)
İdeogram

@Ideogram İndirme işleminin başka bir sağlayıcısını buldum. softsea.com/download/InkscapeBatch.html
Kai Noack

dpi'yi belirlemek için bu seçeneği eklemeniz gerekir, --export-dpi=100burada
dpi'nin


3

SVG'den PNG'ye dönüşüm için cairosvg ( https://cairosvg.org/ ) ImageMagick'ten daha iyi performans gösterdiğini gördüm . Dizininizdeki tüm dosyaları yükleme ve çalıştırma adımları.

pip3 install cairosvg

.Svg dosyalarınızı içeren dizinde bir python kabuğu açın ve şunu çalıştırın:

import os

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

Bu, orijinal .svg dosyalarının üzerine yazmamanızı da sağlar, ancak aynı adı korur. Ardından, tüm .png dosyalarınızı aşağıdakilerle birlikte başka bir dizine taşıyabilirsiniz:

$ mv *.png [new directory]

Bu cevap oldukça büyük SVG dosyam için çalışan tek cevaptı, teşekkürler !!!
Ben Sandeen

1

Neredeyse 2 saat boyunca bununla güreşimden sonra Inkscape'e yerleştim. Toplu olarak bir sürü dosyayı birçok farklı çözünürlükte dönüştürmem gerektiğinden bir Powershell betiği oluşturdum. 106 SVG'yle bilgisayarım yaklaşık 5 saniye dondu, bu yüzden kullanırken dikkatli olun.

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

Mine birkaç saniyeden fazla dondu. &Operatör yeni bir süreç başlar ve svg dosyalarına sahip olarak bu komut birçok yeni inkscape.exe süreçler olarak yaratacak, böylece hemen devam ediyor. Bunun bir süredir bilgisayarınızı oldukça yavaşlattığı ortaya çıkıyor.
Rory

Onunla | Out-Nullbaşlayan satırın sonuna koyarsanız , &bunu benim için çok daha iyi çalışan inkscape.exe komutunu aynı anda çalıştırmaya zorlar.
Rory

1

Aşağıdakileri, SVG'lerin bulunduğu klasörde, Windows için Bash / Ubuntu'da kullanabilirsiniz. Ancak ImageMagick ilk önce rasterleştiriyor, sonra yeniden boyutlandırıyor, bu garip eserler ortaya çıkıyor ...

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

Ayrıca bakınız, iyi çalışıyor gibi görünen Inscape tabanlı bir çözüm (başka bir konudan, bağlantı kaybedildi): 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 Çok basitleştirilmiş bir sürümde inkscape ile kullandım. find -name "*.svg" -exec inkscape {} -e {}.png \;Bu sürümü tercih ls | grep ".svg" | xargs -I file inkscape file -e file.pngetmeme rağmen: dosyalar alfabetik olarak işlendiği için - bu durum böyle değil, kullanırkenfind
loved.by.Jesus


0

Bir toplu işlemi çalıştırmak için çalışan tek bir komut bulamadım, böylece bir dosya listesi oluşturarak ve bir dizi komut oluşturarak çalışmasını sağladım. Bu talimatlar Windows'un tüm sürümleri için çalışmalıdır. Tüm yazma talimatları alıntıları içermez ve aralarındaki her şeyi içerir.

Bunu yapmak için Inkscape, MS Excel veya karşılaştırılabilir bir elektronik tablo düzenleyicisine ve bir liste üreticisine ihtiyacınız olacak. Burada harika bir küçük ücretsiz liste üreteci var: https://www.portablefreeware.com/?id=1171

  • Tüm svg dosyalarını bir klasöre sabitleyin, kopyalayın veya taşıyın.
  • Bu klasörün bir dosya listesini oluşturun ve csv'ye aktarın.
  • CSV'yi Excel'de açın ve dosya adı sütunu dışındaki tüm sütunları silin. Ayrıca [Yol] gibi sütun başlıklarını ve alttaki özet metni de silin.
  • Dosya adları zaten ikinci sütunda değilse, onları kesip yapıştırın.
  • İlk sütunun ilk hücresinde inkscape yazın, ardından bir boşluk ve svg dosyalarınızın sonunda bir ters eğik çizgi (örneğin "inkscape C: \ SVG \") içerdiği klasör yolu yazın. Daha sonra bu hücreyi kopyalayın, altındaki dosya adlarını seçin ve yapıştırın, böylece hepsi aynı metne sahip olsun.
  • Üçüncü sütunda --export-png = ilk hücreye, ardından onları kaydetmek istediğiniz hedef klasöre yazın. Aynı klasörü kullandım. Sözdiziminin doğru olması için başlangıçta bir boşluk bıraktığınızdan emin olun, ancak metnin kalanını bir arada tutun (ör. "--Export-png = C: \ PNG \"). Bunu ilk satırdaki gibi tüm satırlar için kopyalayıp yapıştırın
  • İkinci sütunun tamamını kopyalayın ve dördüncü sütuna yapıştırın. Dördüncü sütun seçiliyken Ctrl + H (Bul ve Değiştir) düğmesine basın. ".Svg" bulma alanına ".png" değiştirme alanına yazın, sonra Tümünü değiştir seçeneğini seçin.

Bunu doğru yaptıysanız, şuna benzeyen her dosya adı için bir satırınız olmalıdır: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ PNG \ | Filename1.png |

  • Beşinci sütunun ilk hücresinde "= concatenate (a2, b2, c2, d2)" yazın. Bu, başlık sütununun silinmediğini varsayar. Parantez içindeki hücre sayıları geçerli satır numarasına uymalıdır. İlk dosya adınız B2 ise, yukarıdaki formül doğrudur. Aksi takdirde, hücre adları ilk dosya adının satırına uyması için parantez içinde verilir (örneğin a1, b1, c1 ...)
  • Bu hücreyi kopyalayıp yapıştırın ve hepsini aynı sütun 1 ve 3'teki gibi doldurun.
  • Şimdi bu beşinci sütunun tamamını kopyalayın ve formüller tarafından üretilen metni altıncı sütuna yapıştırmak için Özel Yapıştır> Değerleri kullanın. Bu altıncı sütun senin paranı vuruyor. Altıncı sütunun tamamını kopyalayın, Not Defteri'ni açın ve son sütunu yapıştırın. Bunu doğru şekilde yaptıysanız, svg dosyalarınızın her birini pngs'ye dönüştürmek için bir komut satırınız olur.
  • Not Defteri dosyasını Inkscape dizinine bir toplu iş dosyası olarak kaydedin. Farklı kaydet penceresi açıldığında, Farklı Kaydet türünü "Tüm Dosyalar" olarak değiştirin ve bir .bat dosyası olarak kaydedin (örneğin, "C: \ Program Files \ Inkscape \ SVGBatch.bat"
  • Tek yapmanız gereken bu klasöre gitmek ve az önce kaydettiğiniz toplu iş dosyasına çift tıklamak. Bir komut istemi açmalı ve tüm dosyaları dönüştürmelidir.

Umarım bu birinin hayatını kolaylaştırır. James


0

Kai'nin cevabı yakın, ama benim için işe yaramadı. Bununla birlikte, birkaç hafif tweaks ile bu ilk kez kusursuz çalıştı:

  1. SVG'lerinizi kullanışlı bir yere kopyalayın
  2. Aynı klasörde bir metin dosyası oluşturun ve yeniden adlandırın convert.bat
  3. Açık convert.batsevdiğiniz metin / kod editörü ve aşağıdakileri girin:

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

(Not bu inkscape.exekonum PC'nizde yürütülebilir program mekanını eşleşen serbest olmalıdır ve ikincisi önce --export-pngolduğu %%A- SVG dosyası varlık dönüştürülmediği o)

  1. convert.batÇalıştırmak için çift ​​tıklayın ve dönüşümlerin sonuçlarını tekrar etmeli.

Yeni dosyaları görmek için Windows klasörünüzü yenilemeniz gerekebileceğini, ancak hepsinin orijinal SVG'lerle aynı konumda oluşturulması gerektiğini unutmayın.


0

Bazı nedenlerden dolayı benim için çalışacak şekilde görüntü veya inkscape alınamadı. Ben sadece elle bu siteyi kullanılan sadece dönüştürmek için 12 dosya vardı: http://svgtopng.com/ bir tedavi çalıştı.


0

Belirli bir dizindeki tüm svg dosyalarını ico dosyalarına dönüştürmek için ImageMagick tabanlı bir çözüm:

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

Açıklama:

  • mogrify: Gibi convert, ancak birden fazla dosya toplu işlem yapmanızı sağlar.
  • -format ico: Hedef dosya formatımız. .icoOrijinal dosyanın üzerine yazmak yerine dosyalar oluşturur (varsayılan olarak mogrify'nin yaptığı gibi).
  • -density 1200: ImageMagick'in SVG'yi rasterleştirmesi gereken bir hedef piksel boyutu belirleyemediğimizden (önce varsayılan yoğunlukla rasterleşir ve sonra ölçeklenir), görüntünün elde edilmesini sağlamak için SVG'yi delice yüksek bir çözünürlükle (1200dpi) rasterleştiririz. olacak downscaled 256x256 yerine upscaled için.
  • -background transparent: Arkaplan şeffaf olarak gösterilecektir.
  • -trim: Resmin etrafındaki varolan kenarlığı kaldırın.
  • -resize 256x256: En boy oranının 256px olmasını sağlayarak en-boy oranını koruyarak görüntüyü ölçeklendirin.
  • -gravity center -extent 256x256: Kısa kenarın da 256 piksele sahip olmasını sağlayarak, tuvali büyütün. Mevcut görüntü merkez hizalıdır. Bu gereklidir, çünkü ICO dosyasının temeli olarak kare bir resme ihtiyacımız var.
  • -define icon:auto-resize: Yalnızca 256x256 görüntüyü değil, aynı zamanda ICO dosyasına önerilen tüm küçültülmüş çözünürlükleri (örneğin 32x32) ekleyin.

0

Burada verilen cevapların çoğu , sorunun istenen boyuttaki kısmını görmezden gelir . Bir convertSVG'yi "yükseltirken" kullanarak tatmin edici sonuçlar alamadım . inkscapedaha iyi bir iş çıkarır ve aynı zamanda arka plan saydamlığını korur.

Kullanım durumunuza bağlı olarak, aşağıdaki seçeneklerden birini kullanın:

  1. belirtilen DPI’da ihracat: inscape in.svg -d 300 -e out.png
  2. belirtilen genişlikte dışa aktarma (en boy oranını koruyarak): inscape in.svg -w 800 -e output.png
  3. belirtilen yükseklikte ihracat (en boy oranını koruyarak): inscape in.svg -h 600 -e output.png

Genişlik ve yükseklik hem de belirten unutmayın olup boy oranı korunur.

Birçok dosyayı bir kerede dönüştürmek için, aşağıdakileri kullanım durumunuza göre ayarlayın (içinde bashveya uyumlu):

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
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.