2013-03-08 4 views
7
में किसी भी छवि प्रकार का एक बेस 64 स्ट्रिंग से छवि हिस्सा

मैं वर्तमान में PHP में बेस 64 छवियों को डिकोड करने के लिए निम्न कर रहा हूँ:मैं डेटा पट्टी कर सकते हैं कैसे: पीएचपी

$img = str_replace('data:image/jpeg;base64,', '', $s['image']); 
    $img = str_replace('data:image/png;base64,', '', $s['image']); 
    $img = str_replace('data:image/gif;base64,', '', $s['image']); 
    $img = str_replace('data:image/bmp;base64,', '', $s['image']); 
    $img = str_replace(' ', '+', $img); 
    $data = base64_decode($img); 

आप देख सकते हैं ऊपर हम स्वीकार कर रहे हैं चार सबसे मानक छवि प्रकार (जेपीईजी, पीएनजी, जीआईएफ, बीएमपी);

हालांकि, इनमें से कुछ छवियां बहुत बड़ी हैं और प्रत्येक 4-5 बार स्कैनिंग के साथ str_replace एक भयानक अपशिष्ट और बहुत अक्षम है।

क्या कोई तरीका है कि मैं डेटा को विश्वसनीय रूप से स्ट्रिप कर सकता हूं: एक बेस में बेस 64 छवि स्ट्रिंग का छवि भाग? शायद स्ट्रिंग में पहले कॉमा का पता लगाकर?

माफ़ी माफ़ी अगर यह एक साधारण समस्या है, तो PHP मेरा फोर्टे नहीं है। अग्रिम में धन्यवाद। कर देगा यह बहुत तेजी से है, क्योंकि यह जीत लिया 'अगर पाठ आप स्थान ले रही हैं छवि में पहले पाठ है

$img = preg_replace('#data:image/[^;]+;base64,#', '', $s['image']); 

, regexp की शुरुआत में ^ जोड़ने:

उत्तर

24

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

$img = preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']); 
+0

आप केक ले:

इस कोड का प्रयास करें! – TFennis

+0

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

+0

@gordyr आपका स्वागत है –

0

आप इसे परीक्षण करने के लिए होता है लेकिन मुझे लगता है इस समाधान मिहाई Iorga के

की तुलना में थोड़ा तेजी से होना चाहिए
$offset = str_pos($s['image'], ','); 
$data = base64_decode(substr($s['image'], $offset)); 
11

फ़ंक्शन file_get_contents शीर्षलेख हटाएं और base64_decode फ़ंक्शन, का उपयोग करें ताकि आपको स्पष्ट सामग्री छवि मिल सके।

$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gA...'; 
$imageContent = file_get_contents($img); 
+1

यह स्वीकार्य उत्तर होना चाहिए। बहुत स्मार्ट समाधान! – raphael

+0

यह निश्चित रूप से स्वीकृत उत्तर होना चाहिए, एक और अधिक सुरुचिपूर्ण समाधान –

संबंधित मुद्दे