बैच SVG छवियों को वांछित आकार PNG या ICO में परिवर्तित करता है


26

मेरे पास एसवीजी आइकनों का गुच्छा है जिसे मैं अपने आवेदन के लिए वीबीनेट 2010 में विकसित करने के लिए उपयोग करना चाहूंगा, और चूंकि इसमें एसवीजी आइकनों को संभालने के लिए कोई समर्थन नहीं है, इसलिए मुझे उन आइकनों को या तो पीएनजी या आईसीओ में बदलने की जरूरत है, पसंद के साथ आउटपुट रिज़ॉल्यूशन। मैंने उबंटू के लिए इस तरह के कमांड-लाइन टूल को बुलाया है rsvgconvert। क्या हमारे पास विंडोज के लिए भी ऐसा कोई टूल है ??

जवाबों:


12

ImageMagick में एक कमांड लाइन टूल है जो लिनक्स और विंडोज (और अन्य) के लिए उपलब्ध है। कन्वर्टर टूल को आसानी से "कन्वर्ट" कहा जाता है। यहाँ कुछ उपयोग प्रलेखन है

और यहाँ है जहाँ आप एक Windows इंस्टालर प्राप्त कर सकते हैं ।


आप इसे लिनक्स (डब्लूएसएल) के लिए विंडोज सबसिस्टम के माध्यम से भी प्राप्त कर सकते हैं,apt install imagemagick
get

(यह linux पर लागू होता है, विंडोज़ पर लागू हो सकता है) यदि आप IM पर -verbose करते हैं तो ऐसा प्रतीत होगा कि IM स्वयं एक मध्यवर्ती ईपीएस फ़ाइल बनाने के लिए inkscape का उपयोग करता है। इसलिए मैं उत्तर देना चाहूंगा @ zetah का उत्तर
उत्तरी-

यहां विंडोज के लिए एक छोटा सा इमेजमैजिक आधारित कनवर्टर है: fosshub.com/SVG2PNG.html यह पुराना है (2014 से), लेकिन फिर भी काम करता है और आपको कोई डॉक्स नहीं पढ़ना है।
8

20

ImageMagick को केवल किसी भी बैच कार्य में शामिल नहीं होना चाहिए जिसमें चित्र शामिल हों। विशेष रूप से इस मामले में जहां ImageMagick SVG रूपांतरण के लिए खराब समाधान है।

कमांड लाइन पर बेहतर प्रयास इंकस्केप :

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


8
आप क्यों कहते हैं कि इंकस्केप ImageMagick से बेहतर है? मैं असहमत नहीं हूं (या सहमत हूं), अधिक जानकारी के लिए उत्सुक हूं।
सैम

कारण ImageMagick जा रहा है बेहतर संभाल png, के लिए उपयुक्त है जेपीजी आदि .. जबकि इंकस्केप बेहतर (SVG) संभाल वेक्टर छवियों के लिए उपयुक्त है
user93

1
जैसा कि यह खड़ा है, यह बैच को बदलने के बारे में सवाल का जवाब नहीं देता है , क्या यह करता है?
या मैपर

जबकि जवाब काम करता है, विंडोज इंकस्केप पर ध्यान केंद्रित करने वाली स्प्लैश स्क्रीन को देरी से दिखाने पर जोर देता है, जिससे बैकग्राउंड में इसे बैच मोड में चलाना असंभव हो जाता है।
तिमवी

@ तिमवी यहां नहीं होता है। बस -zविकल्प का उपयोग करना याद रखें ।
Svish

5

कमांड लाइन बॉक्स से बाहर काम नहीं करती थी, साथ ही मैं चाहता था कि 100 फाइलें परिवर्तित की जाएं। यहाँ मैंने इसे विंडोज 7 के साथ कैसे काम किया:

  1. स्थापित करें - पोर्टेबल एक नहीं!

  2. अपनी सभी svg फ़ाइलों को एक फ़ोल्डर में कॉपी करें, उदाहरण के लिए "C: \ svgs \" वहां:

  3. आप convert.batइस लाइन के साथ एक फ़ाइल बनाते हैं :

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

    (अपनी स्थापना के सही फ़ोल्डर की ओर इंगित करें):

  4. व्यवस्थापक के रूप में CMD खोलें! ऐसा करने के लिए, जीत कुंजी दबाएं, cmd टाइप करें, "cmd.exe" पर राइट क्लिक करें और "Run as Administrator" चुनें।

  5. अपने "C: \ svgs \" पर नेविगेट करें और टाइप करें convert.bat - सभी svg- फाइलें PNGs में बदल जाएंगी।

  6. परिवर्तित PNG फ़ाइलों की खोज करने के लिए Windows Explorer का उपयोग करें। मेरे पीसी पर वे फ़ोल्डर में थे:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

उम्मीद है की वो मदद करदे।


जैसा कि कमांड लाइन के लिए रिज़ॉल्यूशन केवल तय किया जा सकता है जितना मैं देख सकता था, मैंने इंकस्केपबैच टूल का उपयोग करके समाप्त किया । वहाँ मैं सभी छवियों को अपेक्षाकृत बढ़ाने के लिए DPI सेट कर सकता था।

आपको सही सेटिंग्स निर्दिष्ट करने की आवश्यकता है या यह काम नहीं करेगा। मैंने जो किया था यह रहा:

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

"समाप्त करें" को हिट करने के बाद, आपको टूलबार में "बैच बैच प्रारंभ करें ..." बटन दबाने की आवश्यकता है:

यहाँ छवि विवरण दर्ज करें


1
आपके बैच कमांड में संभवतः एक और कमी है %%A(इनपुट फ़ाइल नाम के रूप में)। इसके अलावा, आप यह क्यों मानते हैं कि यह केवल व्यवस्थापक मोड में काम करना चाहिए?
या मैपर

तो यह ImageMagick का उपयोग करने से बेहतर कैसे है?
रीइनियरियरपोस्ट

अफसोस की बात है कि यह कड़ी भी मर गई है। (अगस्त 2017)
आईडोग्राम

@ आई कार्ड मैं डाउनलोड का एक और प्रदाता ffound है। softsea.com/download/InkscapeBatch.html
काई

डीपीआई को निर्दिष्ट करने के लिए आपको इस विकल्प को जोड़ने की आवश्यकता है --export-dpi=100जहां 100 डीपीआई का मूल्य है
एक्समैमेल

3

InkscapeBatch विंडोज पर काम करता है। Inkscape की आवश्यकता है ।


काम नहीं करता है। मैंने Inkscape v0.91 को इंस्टॉल करने के बाद यह कोशिश की, और यह कहता है कि Inkscape नहीं मिला।
जॉरिस ग्रोसमैन

1
लगता है किसी भी अधिक मौजूद नहीं है।
या मैपर


3

SVG से PNG रूपांतरण के लिए मैंने cairosvg ( https://cairosvg.org/ ) पाया जो ImageMagick से बेहतर प्रदर्शन करता है। आपकी निर्देशिका में सभी फ़ाइलों को स्थापित करने और चलाने के लिए चरण।

pip3 install cairosvg

निर्देशिका में एक अजगर खोल खोलें जिसमें आपकी .svg फाइलें हों और चलाएं:

import os

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

यह भी सुनिश्चित करेगा कि आप अपनी मूल .svg फ़ाइलों को अधिलेखित न करें, लेकिन एक ही नाम रखेंगे। तब आप अपनी सभी .png फ़ाइलों को दूसरी निर्देशिका में ले जा सकते हैं:

$ mv *.png [new directory]

यह उत्तर केवल वही है जो मेरे बजाय बड़े SVG फ़ाइल के लिए काम करता है, धन्यवाद !!!
बेन सैंडीन

1

लगभग 2 घंटे तक इसके साथ कुश्ती करने के बाद मैं इंकस्केप के साथ बस गया। चूँकि मुझे बैच के लिए कई अलग-अलग प्रस्तावों में फ़ाइलों का एक गुच्छा परिवर्तित करने की आवश्यकता है, जो मैंने एक पॉवर्सशैल स्क्रिप्ट बनाई है। 106 एसवीजी के साथ मेरा कंप्यूटर लगभग 5 सेकंड के लिए जम जाता है, इसलिए इसका उपयोग करते समय सावधान रहें।

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

कुछ सेकंड से अधिक के लिए मेरा फ्रीज। &ऑपरेटर एक नई प्रक्रिया शुरू होता है और तुरंत जारी है, जैसा कि आप SVG फ़ाइलें है, तो इस स्क्रिप्ट कई नए inkscape.exe प्रक्रियाओं के रूप में पैदा करेगा। इससे पता चलता है कि यह आपके कंप्यूटर को थोड़ी देर के लिए धीमा कर देता है।
रोरी

यदि आप इसके | Out-Nullसाथ शुरू होने वाली पंक्ति के अंत में डालते हैं , तो &यह एक समय में एक tokscape.exe कमांड को चलाने के लिए बाध्य करेगा, जो मेरे लिए बहुत बेहतर काम करता है।
रोरी

1

आप Windows के लिए बैश / उबंटू में निम्नलिखित का उपयोग कर सकते हैं, जिस फ़ोल्डर में आपके पास SVG है। ऐसा लगता है कि ImageMagick पहले फिर से आकार बदलता है, जो अजीब कलाकृतियों में परिणाम…

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

यह भी देखें कि इनसैप बेस्ड सॉल्यूशन ऐसा लगता है जो अच्छी तरह से काम करता है (दूसरे धागे से, लिंक खो गया): 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 मैंने इसे एक बहुत ही सरलीकृत संस्करण में इंकस्केप के साथ उपयोग किया है, find -name "*.svg" -exec inkscape {} -e {}.png \;हालांकि मैं इस संस्करण को पसंद करता हूं: ls | grep ".svg" | xargs -I file inkscape file -e file.pngक्योंकि फाइलें वर्णानुक्रम में संसाधित होती हैं - यह तब उपयोग नहीं होती है, जब का उपयोग करते हुएfind
love.by.Jesus


0

मुझे एक भी कमांड नहीं मिली, जो एक बैच चलाने के लिए काम करे इसलिए मुझे फ़ाइल सूची तैयार करके और कमांड की एक श्रृंखला बनाकर काम करने के लिए मिला। ये निर्देश विंडोज के सभी संस्करणों के लिए काम करना चाहिए। सभी टाइपिंग निर्देश उद्धरणों को बाहर करते हैं और उनके बीच सब कुछ शामिल करते हैं।

ऐसा करने के लिए आपको इंकस्केप, एमएस एक्सेल या तुलनीय स्प्रेडशीट संपादक और एक सूची जनरेटर की आवश्यकता होगी। यहाँ एक बहुत छोटा फ्रीवेयर सूची जनरेटर है: https://www.portablefreeware.com/?id=1171

  • हार्डलिंक, सभी svg फ़ाइलों को एक फ़ोल्डर में कॉपी या स्थानांतरित करें।
  • उस फ़ोल्डर की फ़ाइल सूची बनाएं और सीएसवी को निर्यात करें।
  • एक्सेल में सीएसवी खोलें और फ़ाइल नाम कॉलम को छोड़कर सभी कॉलम हटा दें। स्तंभ शीर्ष जैसे [पथ] और सारांश पाठ को नीचे हटाएं।
  • यदि फ़ाइल नाम पहले से ही दूसरे कॉलम में नहीं हैं, तो उन्हें वहां काटें और चिपकाएँ।
  • पहले कॉलम प्रकार के इनस्केप के पहले सेल में एक स्पेस और उसके बाद फोल्डर पाथ होता है, जहां आपकी svg फाइलें एक ट्रेलिंग बैकस्लैश (उदाहरण के लिए "inkscape C: \ SVG \") शामिल होती हैं। फिर इस सेल को कॉपी करें, उसके नीचे की सभी कोशिकाओं को चुनें जो एक फ़ाइल नाम से पहले हैं और पेस्ट करें ताकि उन सभी में एक ही टेक्स्ट हो।
  • तीसरे स्तंभ प्रकार में --export-png = गंतव्य फ़ोल्डर द्वारा पीछा की गई पहली सेल में आप उन्हें सहेजना चाहेंगे। मैंने केवल उसी फ़ोल्डर का उपयोग किया है। वाक्यविन्यास सही होने के लिए, शुरुआत में एक स्थान जोड़ना सुनिश्चित करें लेकिन शेष पाठ को एक साथ रखें (जैसे "--export-png = C: \ PNG \")। पहले कॉलम की तरह सभी पंक्तियों के लिए इसे कॉपी और पेस्ट करें
  • पूरे दूसरे कॉलम को कॉपी करें और चौथे कॉलम में पेस्ट करें। उस चौथे कॉलम के साथ Ctrl + H (ढूँढें और बदलें) दबाएं। खोज फ़ील्ड प्रकार में ".Svg" को प्रतिस्थापित फ़ील्ड प्रकार ".Png" में, फिर सभी को बदलें का चयन करें।

यदि आपने इसे सही ढंग से किया है, तो आपके पास प्रत्येक फ़ाइल नाम के लिए एक पंक्ति होनी चाहिए जो इस तरह दिखती है: | inkscape C: \ SVG \ | Filename1.svg --export-png = C: \ पीएनजी \ | Filename1.png |

  • पांचवें कॉलम के पहले सेल में "= कॉन्टेनेट (a2, b2, c2, d2)"। यह मान लेता है कि हेडर कॉलम डिलीट नहीं हुआ है। कोष्ठक में सेल नंबर वर्तमान पंक्ति संख्या से सहमत होना चाहिए। यदि आपका पहला फ़ाइल नाम B2 में है, तो उपरोक्त सूत्र सटीक है। अन्यथा सही है, पहली फ़ाइल नाम की पंक्ति (जैसे a1, b1, c1 ...) से मिलान करने के लिए कोष्ठक में सेल नाम
  • कॉलम 1 और 3 की तरह ही इस सेल को नीचे से भरने के लिए कॉपी और पेस्ट करें।
  • अब उस पूरे पांचवें कॉलम को कॉपी करें और छठे कॉलम में फॉर्मूले द्वारा तैयार किए गए टेक्स्ट को पेस्ट करने के लिए Paste Special> Values ​​का उपयोग करें। यह छठा कॉलम आपके पैसे का शॉट है। पूरे छठे कॉलम को कॉपी करें, नोटपैड खोलें और उस आखिरी कॉलम को उसमें चिपकाएं। यदि आपने इसे सही ढंग से किया है, तो आपके पास अपनी प्रत्येक svg फाइल को pngs में बदलने के लिए एक कमांड लाइन होगी।
  • बैच फ़ाइल के रूप में Inkscape निर्देशिका में नोटपैड फ़ाइल सहेजें। जब विंडो के खुलने का समय खुलता है, तो Save को "All Files" में बदलें और इसे .bat फ़ाइल (जैसे "C: \ Program Files \ Inkscape \ SVGBatch.bat" के रूप में सहेजें)
  • वह सब करने के लिए छोड़ दिया जाता है, उस फ़ोल्डर में जाता है और जिस बैच फ़ाइल को आपने सहेजा है, उस पर डबल-क्लिक करें। यह एक कमांड प्रॉम्प्ट खोलना चाहिए और सभी फ़ाइलों को परिवर्तित करना चाहिए।

आशा है कि किसी के जीवन को आसान बनाता है। जेम्स


0

काई का जवाब करीब है, लेकिन मेरे लिए काम नहीं किया। हालाँकि, थोड़े से मामूली बदलावों के साथ, इसने पहली बार निर्दोष रूप से काम किया:

  1. अपने SVG को एक आसान स्थान पर कॉपी करें
  2. उसी फ़ोल्डर में एक टेक्स्ट फ़ाइल बनाएं और उसका नाम बदलें convert.bat
  3. convert.batअपने पसंदीदा पाठ / कोड संपादक में खोलें और निम्नलिखित दर्ज करें:

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

(ध्यान दें कि inkscape.exeस्थान आपके पीसी पर निष्पादन योग्य कार्यक्रम के स्थान से मेल खाना चाहिए; और इससे पहले दूसरा --export-pngहै %%A- वह एसवीजी फ़ाइल परिवर्तित किया जा रहा है)

  1. convert.batचलाने के लिए डबल-क्लिक करें , और इसे रूपांतरणों के परिणामों को प्रतिध्वनित करना चाहिए।

ध्यान दें कि नई फ़ाइलों को देखने के लिए आपको अपने विंडोज फोल्डर को रिफ्रेश करने की आवश्यकता हो सकती है, लेकिन उन्हें मूल एसवीएस के समान स्थान पर बनाया जाना चाहिए।


0

किसी कारण से मेरे लिए काम करने के लिए इमेजमैजिक या इंकस्केप नहीं मिल सका। मेरे पास केवल 12 फाइलें थीं जो सिर्फ इस साइट को मैन्युअल रूप से उपयोग करने के लिए परिवर्तित होती हैं: http://svgtopng.com/ ने एक उपचार किया।


0

यहाँ दिए गए डायरेक्टरी में सभी svg फ़ाइलों को ico फ़ाइलों में बदलने के लिए एक ImageMagick- आधारित समाधान है:

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

स्पष्टीकरण:

  • mogrify: जैसे convert, लेकिन आप कई फ़ाइलों को बैच-प्रोसेस करने की अनुमति देता है।
  • -format ico: हमारा लक्ष्य फ़ाइल स्वरूप। .icoमूल फ़ाइल को अधिलेखित करने के बजाय फ़ाइलें बनाता है (जैसा कि डिफ़ॉल्ट रूप से mogrify करेगा)।
  • -density 1200: चूंकि हम एक लक्ष्य पिक्सेल आकार निर्दिष्ट नहीं कर सकते हैं कि ImageMagick को SVG को rasterize करना चाहिए (यह पहले एक डिफ़ॉल्ट घनत्व और फिर स्केल के साथ rasterize करेगा), हम यह सुनिश्चित करने के लिए कि उच्च छवि (1200dpi) के साथ SVG को rasterize करते हैं, ताकि छवि को सुनिश्चित किया जा सके हो जाएगा downscaled 256x256 के बजाय upscaled करने के लिए।
  • -background transparent: पृष्ठभूमि को पारदर्शी के रूप में प्रस्तुत किया जाएगा।
  • -trim: छवि के आसपास मौजूदा सीमा को हटा दें।
  • -resize 256x256: पहलू अनुपात को ध्यान में रखते हुए, छवि को स्केल करें, सुनिश्चित करें कि सबसे लंबे पक्ष में 256px है।
  • -gravity center -extent 256x256: कैनवास को बढ़ाना, यह सुनिश्चित करना कि शॉर्ट साइड में भी 256px है। मौजूदा छवि केंद्र-संरेखित है। यह आवश्यक है क्योंकि हमें ICO फ़ाइल के आधार के रूप में एक वर्ग छवि की आवश्यकता है।
  • -define icon:auto-resize: ICO फाइल में केवल 256x256 छवि ही शामिल नहीं है, बल्कि सभी सुझाए गए रिज़ॉल्यूशन (जैसे 32x32) भी शामिल हैं।

0

यहां दिए गए अधिकांश उत्तर प्रश्न के वांछित आकार भाग पर ध्यान नहीं देते हैं । convertजब एसवीजी "अपस्कूलिंग" का उपयोग करके मुझे संतोषजनक परिणाम नहीं मिल सके । inkscapeएक बेहतर काम करता है और पृष्ठभूमि की पारदर्शिता भी रखता है।

आपके उपयोग के मामले के आधार पर, निम्न विकल्पों में से एक का उपयोग करें:

  1. निर्दिष्ट DPI पर निर्यात: inscape in.svg -d 300 -e out.png
  2. निर्दिष्ट चौड़ाई पर निर्यात (पहलू अनुपात बनाए रखना): inscape in.svg -w 800 -e output.png
  3. निर्दिष्ट ऊंचाई पर निर्यात (पहलू अनुपात बनाए रखना): inscape in.svg -h 600 -e output.png

ध्यान दें कि चौड़ाई और ऊंचाई दोनों को निर्दिष्ट करने से पहलू अनुपात संरक्षित नहीं होता है।

एक साथ कई फ़ाइलों को परिवर्तित करने के लिए, अपने उपयोग के मामले में ( bashया संगत) निम्नलिखित को समायोजित करें :

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.