2012-10-29 17 views
9

में कनवर्ट करते समय घातक त्रुटि मैं एसवीजी टेक्स्ट को पीएनजी छवि में परिवर्तित करने के लिए PHP के साथ छवि-मैजिक का उपयोग करने की कोशिश कर रहा हूं। यह एसवीजी NVD3 से उत्पन्न एक चार्ट है और मैं अपने उपयोगकर्ताओं को इसे एक छवि के रूप में डाउनलोड करने की अनुमति देना चाहता हूं।readimageblob: एसवीजी को पीएनजी

असल में, मैं एसएसजी डेटा भेज रहा हूं, जेएसओएन के साथ PHP हैंडलर को एन्कोड किया गया है जिसे इसे पीएनजी छवि के रूप में आउटपुट करना है।

लेकिन, इस निम्न त्रुटि निकलती है:

<?php 
    /* Derived in part from: http://stackoverflow.com/a/4809562/937891 */ 
    $svg=json_decode($_REQUEST["svgData"]); 
    $im=new Imagick(); 
    $im->readImageBlob($svg); 
    $im->setImageFormat("png24"); 
    header("Content-Type: image/png"); 
    $thumbnail = $im->getImageBlob(); 
    echo $thumbnail; 
?> 

एचटीएमएल:

<form id="exportSpendTrendTrigger" method="POST" action="svg2png.php" target="_blank"> 
    <input id="exportSpendTrendSvgData" type="hidden" name="svgData" /> 
    <input type="submit" class="btn" value="Export" /> 
</form> 
<div id="spendtrend"> 
    <svg></svg> 
</div> 

छवि परिवर्तित करने के लिए

Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ blob.c/BlobToImage/347' in svg2png.php:4 Stack trace: #0 svg2png.php(4): Imagick->readimageblob(' 

PHP स्क्रिप्ट jQuery:

exportSpendTrend = function (e) { 
    //Show the user the PNG-image version for download 
    $("#exportSpendTrendSvgData").val(JSON.stringify($("#spendtrend").html().trim())); 
} 

$("#exportSpendTrendTrigger").on("submit", exportSpendTrend); 

उदाहरण एसवीजी, NVD3 द्वारा उत्पन्न: http://pastebin.com/Z3TvDK16

यह

+3

अधिकतर आपके इमेजिक इंस्टॉल में सही प्रतिनिधि गायब है। देखें [छवि मैगिक एसवीजी को पीएनजी में कनवर्ट करें जो आरएसवीजी सक्षम के साथ काम नहीं कर रहा है] (http://stackoverflow.com/q/11592085) –

उत्तर

22

एसवीजी फ़ाइल पाठ संरचना readImageBlob के लिए निर्दिष्ट किए जाने की आवश्यकता पीएचपी 5.3 और Imagick के साथ एक Ubuntu सर्वर पर है फ़ाइल को डीकोड करने के लिए। <?xml version="1.0" encoding="UTF-8" standalone="no"?> अपने चर के साथ svg पाठ होने के लिए तैयार करें।

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg; 

और आप जाने के लिए अच्छे हैं।

5

और याद रखें कि

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

एक चर कि एसवीजी पाठ होता है में पहली पंक्ति होना चाहिए। यह जानकर कि आपको कुछ सिरदर्द बचा सकता है।