2012-05-01 12 views
7

के साथ एक एसवीजी स्ट्रिंग को जेपीजी में परिवर्तित करने के लिए कैसे करें छवि मैगिक का उपयोग करते हुए एसवीजी तारों से जेपीईजी को रास्टराइज करने का प्रयास करने के दो दिन बाद मैंने अंततः छोड़ दिया है।इंकस्केप

हालांकि मैं वास्तविक रूपांतरण को ठीक से काम करने में कामयाब रहा, ऐसा लगता है कि इमेजमैजिक छवि को प्रतिपादित करते समय सही ढंग से ट्रांसफॉर्म/घुमावदार सुविधाओं को सही रूप से परिवर्तित नहीं कर सकता है, जिससे आउटपुट मूल एसवीजी से अलग हो जाता है।

आगे शोध करने के बाद ऐसा लगता है कि यह एक ज्ञात मुद्दा है और 'इनक्सकेप' एसवीजी को PHP में जेपीईजी/पीएनजी में परिवर्तित करने के लिए उपयोग करने का सबसे अच्छा तरीका है।

समस्या यह है कि मेरा एसवीजी डेटा JSON के माध्यम से मेरी PHP स्क्रिप्ट पर भेजा जाता है। मैं इसे परिवर्तित करने के लिए इंकस्केप कमांड लाइन में ब्लॉब या स्ट्रिंग कैसे प्राप्त करूं?

किसी भी सुझाव के लिए बहुत धन्यवाद।

उत्तर

2

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

आप की तरह कुछ की आवश्यकता होगी: आप उपयोगकर्ता से पूर्ण/आंशिक एसवीजी इनपुट स्वीकार कर रहे हैं

/path/to/inkscape \ 
    --without-gui \ 
    --export-png=/path/to/output.png \ 
    /tmp/file/input.svg 

, मन में भालू वहाँ सुरक्षा के मुद्दों की एक अच्छी संख्या में आप को ध्यान में रखना आवश्यक है। यदि आवश्यक हो तो इस पर विस्तार करने के लिए खुश है।

+0

बेशक, मुझे विश्वास नहीं है कि मैंने इसके बारे में नहीं सोचा था। एसवीजी इनपुट ऐप के भीतर सभी जेनरेट क्लाइंट पक्ष है (वस्तुओं/छवियों को खींचना और बदलना आदि) ताकि उपयोगकर्ता वास्तव में कभी भी किसी भी एसवीजी कोड को इनपुट न कर सके। उन्होंने कहा कि यह अभी भी कई सुरक्षा छेद छोड़ देता है जिन्हें मैं अच्छी तरह से जानता हूं। त्वरित और सटीक उत्तर के लिए धन्यवाद! – gordyr

+0

कोई जांच नहीं। जब तक आप सुरक्षा छेद के बारे में जानते हैं - मैं उस एप्लिकेशन पर काम कर रहा हूं जिसमें उपयोगकर्ता एक एसवीजी दस्तावेज़ अपलोड करते हैं, और मुझे अक्सर दिलचस्प "विशेषताएं" मिल रही हैं! – halfer

+0

मैं केवल कल्पना कर सकता हूं कि आपके साथ क्या हो रहा है! आउच! ... फिर से धन्यवाद :-) – gordyr

3

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

// Open Inkscape process 
$process = proc_open(
    '/path/to/inkscape -z -f /dev/fd/0 -e /path/to/output' 
    array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), 
    $pipes 
); 

// Write svg to stdin 
fwrite($pipes[0], $svg); 

// Close process 
foreach ($pipes as $pipe) fclose($pipe); 
proc_close($process); 
संबंधित मुद्दे