2011-12-18 16 views
21

पर कनवर्ट करें ठीक है, मेरा सवाल बहुत आसान है, मैं बस बेस 64 पर imagepng/imagejpg के आउटपुट को कनवर्ट करना चाहता हूं, मैं यह कैसे कर सकता हूं? आउटपुट बफर कैप्चर करने का सही तरीका है? धन्यवाद।जीडी आउटपुट को बेस 64

उत्तर

50

imagejpeg/imagepng कोई डेटा नहीं लौटाता है, वे छवि डेटा सीधे आउटपुट स्ट्रीम (या फ़ाइल में) लिखते हैं।

आप इस डेटा सबसे आसान तरीका PHPs Output Control Functions उपयोग करने के लिए है बेस 64 के रूप में एन्कोड पर कब्जा, और फिर $image_data पर base64_encode का उपयोग करना चाहते हैं तो।

ob_start(); 

    imagejpeg ($img); 
    $image_data = ob_get_contents(); 

ob_end_clean(); 

$image_data_base64 = base64_encode ($image_data); 
4

बेस 64 एन्कोडेड छवियों के लिए सबसे आम उपयोग केस HTML आउटपुट है। मैं इस मामले के लिए एक और पूरा समाधान प्रदान करना चाहता हूं। मैंने आउटपुट छवि प्रारूपों को स्विच करने की क्षमता भी जोड़ा है।

// Example 
$gdImg = imagecreate(100, 100); 
imagecolorallocate($gdImg, 0, 0, 0); 
echo gdImgToHTML($gdImg); 
imagedestroy($gdImg); 

// Create an HTML Img Tag with Base64 Image Data 
function gdImgToHTML($gdImg, $format='jpg') { 

    // Validate Format 
    if(in_array($format, array('jpg', 'jpeg', 'png', 'gif'))) { 

     ob_start(); 

     if($format == 'jpg' || $format == 'jpeg') { 

      imagejpeg($gdImg); 

     } elseif($format == 'png') { 

      imagepng($gdImg); 

     } elseif($format == 'gif') { 

      imagegif($gdImg); 
     } 

     $data = ob_get_contents(); 
     ob_end_clean(); 

     // Check for gd errors/buffer errors 
     if(!empty($data)) { 

      $data = base64_encode($data); 

      // Check for base64 errors 
      if ($data !== false) { 

       // Success 
       return "<img src='data:image/$format;base64,$data'>"; 
      } 
     } 
    } 

    // Failure 
    return '<img>'; 
} 
+0

क्या हमें 'imagedestroy ($ gdImg)' कॉल करने की आवश्यकता है या 'ob_end_clean()' हमारे लिए इसका ख्याल रखेगा? – user3442612

+0

@ user3442612 उपयोग के बाद छवियों को मैन्युअल रूप से नष्ट करना अच्छा अभ्यास है। मुझे विश्वास नहीं है कि यह इस संक्षिप्त नमूना के लिए उपयुक्त है, लेकिन मैं इसे "सही तरीके से" करने के लिए जोड़ दूंगा। धन्यवाद। – Lachmanski