दिलचस्प पोस्ट
एक यूआईटीबार को अपने आइकन चित्रों में एक ढाल लगाने से रोकना अक्ष के चारों ओर एक चतुष्कोणीय रोटेशन के घटक क्या एक सरणी जावा में वस्तु है? मेटाडेटा मेटाडाटा का उपयोग करके लोड नहीं किया गया था नोड / एक्सप्रेस: ​​EADDRINUSE, पता पहले से उपयोग में है – सर्वर को मार डालो जावा: एक सरणी में सर्वोच्च मूल्य ढूँढना Phpmyadmin का उपयोग कर एक संग्रहीत कार्यप्रणाली को लिखने के लिए और इसे php के माध्यम से कैसे उपयोग करें? टाइमर के लिए एंड्रॉइड थ्रेड एक PostgreSQL फ़ंक्शन पैरामीटर के रूप में तालिका का नाम किसी फ़ाइल में कोई शब्दकोश कैसे सहेज सकता है? आईओएस ऑटोलायआउट- दृश्यों के बीच दो अलग-अलग दूरी सेट करने के तरीके, स्क्रीन ऊंचाई पर निर्भर करता है जावा का उपयोग करते हुए विंडोज रजिस्ट्री को पढ़ें / लिखें Xcode उपयोग svn में संघर्ष (फ़ाइल project.pbxproj) मर्ज कैसे करें? क्यों WCF सूची के बजाय <myObject वापस आती है, जैसे मैं उम्मीद कर रहा था? 2-मार्गी विलय के मुकाबले एक 3-रास्ता विलय क्यों फायदेमंद है?

पायथन में पीएनजी को एसवीजी कन्वर्ट करें

मैं कैसे एक svg png , पायथन में परिवर्तित कर सकता हूँ? मैं StringIO की एक घटना में svg भंडारण कर रहा हूँ क्या मुझे पकाइरो लाइब्रेरी का उपयोग करना चाहिए? मैं उस कोड को कैसे लिखूं?

वेब के समाधान से एकत्रित समाधान "पायथन में पीएनजी को एसवीजी कन्वर्ट करें"

इसका जवाब " pyrsvg " है – लाइब्रेस्वि के लिए एक पायथन बाइंडिंग।

इसमें उबुंटू अजगर-आरएसवीजी पैकेज उपलब्ध है। इसके नाम के लिए Google खोजना बहुत कम है क्योंकि इसका स्रोत कोड "gnome-python-desktop" gnome प्रोजेक्ट जीआईटी रिपॉजिटरी में शामिल है।

मैंने एक न्यूनतम "हैलो वर्ल्ड" बनाया है जो एसवीजी को कैरो सतह पर भेजता है और इसे डिस्क पर लिखता है:

 import cairo import rsvg img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 640,480) ctx = cairo.Context(img) ## handle = rsvg.Handle(<svg filename>) # or, for in memory SVG data: handle= rsvg.Handle(None, str(<svg data>)) handle.render_cairo(ctx) img.write_to_png("svg.png") 

अद्यतन : 2014 के रूप में फेडोरा लिनक्स वितरण के लिए आवश्यक पैकेज है: gnome-python2-rsvg । उपरोक्त स्निपेट लिस्टिंग अभी भी काम करता है-है

यहां मैंने कैरोस्कोप का प्रयोग किया है:

 from cairosvg import svg2png svg_code = """ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="10"/> <line x1="12" y1="8" x2="12" y2="12"/> <line x1="12" y1="16" x2="12" y2="16"/> </svg> """ svg2png(bytestring=svg_code,write_to='output.png') 

और यह एक जादू की तरह काम करता है!

और देखें: कैरोसवेग दस्तावेज़

Inkscape स्थापित करें और उसे कमांड लाइन के रूप में कॉल करें:

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

आप विशिष्ट आयताकार क्षेत्र केवल पैरामीटर- -j प्रयोग से भी स्नैप कर सकते हैं, उदाहरण के लिए "0: 125: 451: 217"

 ${INKSCAPE_PATH} -z -f ${source_svg} -w ${width} -j -a ${coordinates} -e ${dest_png} 

यदि आप SVG फ़ाइल में केवल एक ऑब्जेक्ट दिखाना चाहते हैं, तो आप पैरामीटर -i ऑब्जेक्ट आईडी को निर्दिष्ट कर सकते हैं जिसे आपने एसवीजी में सेटअप किया है। यह सब कुछ छुपाता है

 ${INKSCAPE_PATH} -z -f ${source_svg} -w ${width} -i ${object} -j -a ${coordinates} -e ${dest_png} 

मैं कुछ खूबसूरत उन्नत एसवीजी आयात करने के लिए वंड-पी (छवि मैजिक के चारों ओर वंड रेपरे के क्रियान्वयन) का उपयोग कर रहा हूं और अब तक अच्छे परिणाम देखे हैं! यह सभी कोड लेता है:

  with wand.image.Image( blob=svg_file.read(), format="svg" ) as image: png_image = image.make_blob("png") 

मैंने आज ही इसकी खोज की है, और मुझे लगा कि ऐसा किसी और के लिए बंटवारा करना है जो इस उत्तर में घुसपैठ कर सकता है क्योंकि यह काफी समय से इन सवालों के जवाब दिए गए थे।

नोट: तकनीकी रूप से परीक्षण में मुझे पता चला कि आपको छवि मैजिक के लिए प्रारूप पैरामीटर में भी वास्तव में पास नहीं करना है, इसलिए with wand.image.Image( blob=svg_file.read() ) as image: वास्तव में जरूरी सभी था।

संपादित करें: qris द्वारा एक प्रयास किए गए संपादन से, यहां कुछ सहायक कोड है जो आपको एक एसवीजी के साथ इमेजमेजिक का उपयोग करने देता है जिसमें एक पारदर्शी पृष्ठभूमि है:

 from wand.api import library import wand.color import wand.image with wand.image.Image() as image: with wand.color.Color('transparent') as background_color: library.MagickSetBackgroundColor(image.wand, background_color.resource) image.read(blob=svg_file.read(), format="svg") png_image = image.make_blob("png32") with open(output_filename, "wb") as out: out.write(png_image) 

इसे आज़माएं: http://cairosvg.org/

साइट कहती है:

कैरो एसवीजी शुद्ध अजगर में लिखा गया है और केवल पाइकाइरो पर निर्भर करता है। यह पायथन 2.6 और 2.7 पर काम करने के लिए जाना जाता है।

25 नवंबर 2016 को अपडेट करें :

2.0.0 एक नया प्रमुख संस्करण है, इसके चैंजलॉग में शामिल हैं:

  • पायथन 2 समर्थन ड्रॉप करें

एक और समाधान जो मैंने यहां पाया है कि कैसे एक QImage के लिए एक छोटा एसवीजी प्रस्तुत करना है?

 from PySide.QtSvg import * from PySide.QtGui import * def convertSvgToPng(svgFilepath,pngFilepath,width): r=QSvgRenderer(svgFilepath) height=r.defaultSize().height()*width/r.defaultSize().width() i=QImage(width,height,QImage.Format_ARGB32) p=QPainter(i) r.render(p) i.save(pngFilepath) p.end() 

PySide आसानी से विंडोज में एक बाइनरी पैकेज से स्थापित किया गया है (और मैं इसे अन्य बातों के लिए उपयोग करता हूं, इसलिए मेरे लिए आसान है)।

हालांकि, मैंने विकिमीडिया से देश के ध्वज को परिवर्तित करते समय कुछ समस्याएं देखीं, शायद शायद सबसे मजबूत एसवीजी पार्सर / रेंडरर नहीं।

Jsbueno के उत्तर पर एक छोटा सा एक्सटेंशन:

 #!/usr/bin/env python import cairo import rsvg from xml.dom import minidom def convert_svg_to_png(svg_file, output_file): # Get the svg files content with open(svg_file) as f: svg_data = f.read() # Get the width / height inside of the SVG doc = minidom.parse(svg_file) width = int([path.getAttribute('width') for path in doc.getElementsByTagName('svg')][0]) height = int([path.getAttribute('height') for path in doc.getElementsByTagName('svg')][0]) doc.unlink() # create the png img = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(img) handler = rsvg.Handle(None, str(svg_data)) handler.render_cairo(ctx) img.write_to_png(output_file) if __name__ == '__main__': from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument("-f", "--file", dest="svg_file", help="SVG input file", metavar="FILE") parser.add_argument("-o", "--output", dest="output", default="svg.png", help="PNG output file", metavar="FILE") args = parser.parse_args() convert_svg_to_png(args.svg_file, args.output) 

यहाँ एक एंड-टू-एंड पायथन उदाहरण है।

ध्यान दें कि यह कुछ क्रूर आउटपुट को दबा देता है जो इंकस्केप सामान्य त्रुटि-मुक्त ऑपरेशन के दौरान कंसोल (विशेष रूप से, स्टेडरर और स्टडआउट) को लिखता है। आउटपुट को दो स्ट्रिंग चर में कैप्चर किया जाता है, out और err

 import subprocess # May want to use subprocess32 instead cmd_list = [ '/full/path/to/inkscape', '-z', '--export-png', '/path/to/output.png', '--export-width', 100, '--export-height', 100, '/path/to/input.svg' ] # Invoke the command. Divert output that normally goes to stdout or stderr. p = subprocess.Popen( cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # Below, < out > and < err > are strings or < None >, derived from stdout and stderr. out, err = p.communicate() # Waits for process to terminate # Maybe do something with stdout output that is in < out > # Maybe do something with stderr output that is in < err > if p.returncode: raise Exception( 'Inkscape error: ' + (err or '?') ) 

उदाहरण के लिए, जब मेरे मैक ओएस सिस्टम पर एक विशेष काम चलाते हैं, out समाप्त हो रहा है:

 Background RRGGBBAA: ffffff00 Area 0:0:339:339 exported to 100 x 100 pixels (72.4584 dpi) Bitmap saved as: /path/to/output.png 

(इनपुट एसवीजी फाइल में 33 9 पिक्सल का आकार था।)