2010-01-15 17 views
27

से छवि को फिर से बनाएं और प्रदर्शित करें क्या बाइनरी डेटा से छवियों को फिर से बनाना संभव है (यदि आवश्यक हो तो उन्हें संसाधित करें) और उन्हें एक ही स्क्रिप्ट में प्रदर्शित करें? जैसेphp: बाइनरी डेटा

// get and display image 1: 
$imagedata1 = file_get_contents('assets/test.png'); 
$imagedata1 = process_using_gd_or_something($imagedata1); 

echo "<img src={$imagedata1} >"; // <-- IS THIS (OR EQUIVALENT) POSSIBLE? 

// get and display image 2: 
//etc... 

मैं प्रसंस्करण के बाद डिस्क पर करने के लिए छवियों को संग्रहीत करने और उन्हें वहाँ से हो रही है, या एक बाहरी स्क्रिप्ट का उपयोग कर से बचना चाहते हैं कुछ ...

+3

छवियाँ * * बाइनरी डेटा कर रहे हैं! – pavium

+0

अच्छा बिंदु! डाउनसाइड्स सूचीबद्ध करने के लिए :-) – Cambiata

उत्तर

55

आप छवि विशेषता में डेटा URI का उपयोग करके ऐसा कर सकते हैं।

प्रारूप है: data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

इस उदाहरण से सीधे है Wikipedia page on data URIs:

<?php 
function data_uri($file, $mime) 
{ 
    $contents = file_get_contents($file); 
    $base64 = base64_encode($contents); 
    return ('data:' . $mime . ';base64,' . $base64); 
} 
?> 

<img src="<?php echo data_uri('elephant.png','image/png'); ?>" alt="An elephant" /> 
+4

+1 धन्यवाद बेन! वास्तव में मुझे क्या चाहिए! – Gordon

+0

का उपयोग करने के लिए – Cambiata

+0

कृपया ध्यान दें कि सभी ब्राउज़र डेटा यूआरआई को उचित रूप से प्रस्तुत नहीं करेंगे। सुनिश्चित करें कि आप इसे अच्छी तरह से जांचें ... – ircmaxell

21

यह वास्तव में इनलाइन छवियों का उपयोग संभव है (बुलाया data URI रों)।

आपकी छवि टैग कुछ इस तरह दिखेगा:

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/ 
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp 
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" 
width="16" height="14" alt="embedded folder icon"> 

क्यों वे अधिकतर एक अच्छा विचार नहीं कर रहे हैं:

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

  • इनलाइन छवियों को बेस 64 एन्कोडेड होना चाहिए, उनके आकार में 33% जोड़ना आवश्यक है।

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

+1

+1। अंगूठे के नियम के रूप में, इस तकनीक का उपयोग अपेक्षाकृत छोटे (आकार के अनुसार) छवियों के लिए किया जाना चाहिए, उदाहरण के लिए डब्ल्यू 3 के वैधकर्ता पर फेविकॉन सूचक: http://validator.w3.org/check?uri=http%3A//stackoverflow.com/questions/2070603/php-recreate-and-display-an-image-from-binary- डेटा – jensgram

+0

धन्यवाद, पेक्का! StackOverflow और (इसके उपयोगकर्ता) नियम! सही शब्द * डेटा यूआरआई * – Cambiata

3

अन्य संभावना आप उत्पादन के लिए छवि डेटा उत्पादन एक स्क्रिप्ट बना सकते हैं और इसे करने के लिए लिंक को निर्देशित करने के लिए है ।

image.php

$imagedata1 = file_get_contents('assets/test.png'); 
$imagedata1 = process_using_gd_or_something($imagedata1); 

header('Content-type: image/png'); 
echo $imagedata1; 

other_pages.php:

echo "<img src='image.php?some_params'>"; 

संपादित करें: क्षमा करें, मैं एक बाहरी स्क्रिप्ट नहीं चाहते का नोटिस याद किया है, लेकिन इस समाधान एन्कोडिंग तुलना में अधिक कुशल है बेस 64 के लिए छवि।

1

मामले में आप सिर्फ छवि चाहते हैं, उसके चारों ओर किसी भी html बिना आप निम्नलिखित का उपयोग कर सकते हैं:

$filename = 'assets/test.png'; 
$original_image = file_get_contents($filename); 
$processed_image = process_the_image_somehow($original_image); 

header('Content-type: '.mime_content_type($filename)); 
header('Content-Length: '.strlen($processed_image)); 
echo $processed_image; 

आप सामग्री-लंबाई हेडर भूल नहीं चाहिए, अन्यथा यह काम नहीं करेगा। आप mime_content_type() को भी बदलना चाहते हैं क्योंकि इसे दस्तावेज़ों के अनुसार बहिष्कृत किया गया है।

4

इस प्रयास करें ...

$img=base64_encode($row['PICTURE']); 

<img alt="105x105" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/> 
संबंधित मुद्दे