2012-02-16 14 views
5

मैं एक आरजीबी रंग कोड से 1 पीएक्स छवि (जेपीजी, पीएनजी और जीआईएफ) द्वारा 1 पीएक्स बनाने के लिए एक और अधिक प्रभावी तरीका जानने की कोशिश कर रहा हूं, php में ।आरजीबी से 1 पीएक्स बेस 64 एन्कोडेड डेटा यूरी में PHP को कैसे परिवर्तित करें

नीचे दिया गया उदाहरण ऐसा करने की एक विधि को दिखाता है लेकिन मैं किसी प्रकार के एल्गोरिदम की उम्मीद कर रहा था जो मुझे किसी भी पुस्तकालय या PHP एक्सटेंशन को लोड किए बिना समान आउटपुट प्राप्त करेगा।

उदाहरण:

function rgbToDataUri($r,$g,$b,$type) 
{ 
    $im = imageCreateTrueColor(1, 1); 

    imageFill($im, 0, 0, ImageColorAllocate($im,$r,$g,$b)); 

    ob_start(); 

    switch($type) 
    { 
     case 'gif': 
      imageGif($im); 
      break; 
     case 'jpg': 
     case 'jpeg': 
      imageJpeg($im); 
      break; 
     default: 
      imagePng($im); 
    } 

    $img = ob_get_contents(); 

    ob_end_clean(); 

    return 'data:image/' . $type . ';base64,' . base64_encode($img); 
} 

echo rgbToDataUri(0,0,0,'gif'); 

आउटपुट:

data:image/gif;base64,R0lGODdhAQABAIAAAAQCBAAAACwAAAAAAQABAAACAkQBADs= 

मेरे लक्ष्यों (प्राथमिकता क्रम में) कर रहे हैं:

  1. कम स्मृति की खपत
  2. उच्च प्रोसेसर दक्षता
  3. प्रसंस्करण की उच्च गति

आवश्यकताओं के समर्थन GIF, JPG और PNG शामिल हैं। इन एकल पिक्सेल छवियों में से 20 - 50 से कहीं भी प्रत्येक अनुरोध के साथ बनाया जाएगा (प्रत्येक पिक्सेल दूसरों से स्वतंत्र है)।

1px एकल रंग छवि के लिए बाइनरी कैसे उत्पन्न करता है?

+1

आपका कोड उतना सरल/सीधा है जितना है। आप लगभग निश्चित रूप से हाथ से सभी विभिन्न छवि प्रारूपों को लागू नहीं करना चाहते हैं। – Amber

+0

बीएमपी आउटपुट करने के बारे में क्या? एक पिक्सेल के लिए यह केवल तीनों प्रारूपों के रूप में उतना ही कुशल है और शायद यह काफी आसान है ताकि आप बाइनरी को थोड़ा सा स्थानांतरण और 'पैकिंग' के बिना सीधे काम कर सकें। – deceze

+0

@amber दुर्भाग्यवश, सादगी इस विशेष अभ्यास का लक्ष्य नहीं है। –

उत्तर

0

मैं इस क्षेत्र में एक विशेषज्ञ नहीं हूं। लेकिन मैं "ImageMagick" पर आया जो छवियों को बनाने और संशोधित करने के लिए मूल PHP एक्सटेंशन है। यह डीपीएक्स, एक्सआर, जीआईएफ, जेपीईजी, जेपीईजी -2000, पीडीएफ, फोटोसीडी, पीएनजी, पोस्टस्क्रिप्ट, एसवीजी, और टीआईएफएफ सहित विभिन्न प्रारूपों (100 से अधिक) में छवियों को पढ़, परिवर्तित और लिख सकता है।

+2

निश्चित रूप से उसे अपने लक्ष्यों के साथ मदद नहीं करता है: कम स्मृति, सीपीयू उपयोग, गति। – RobinUS2

+0

धन्यवाद लेकिन रॉबिनस 2 इस पर सही है। –

0

मैं आकार 1x1 पिक्सेल की प्रत्येक समर्थित छवि के लिए बाइनरी स्ट्रिंग रखने का सुझाव देता हूं और एक ऐसा स्थान ढूंढता हूं जहां यह रंग डेटा संग्रहीत करता है (उपलब्ध चश्मे का उपयोग करके)। फिर आप वहां आवश्यक रंग डालते हैं और बेस 64 एन्कोड करते हैं।

यह कम से कम पीएनजी और जीआईएफ के लिए करना चाहिए। उनके पास पैलेट हैं और सभी रंग डेटा एक ही स्थान पर संग्रहीत हैं। दूसरी ओर, जेपीजी, सादे आरजीबी को सॉट नहीं करता है, इसलिए यह कुछ हद तक कठिन है (और निश्चित रूप से 1x1 छवि के लिए सबसे अच्छा विकल्प नहीं है)।

+0

मैंने इस विधि को माना है, लेकिन मुझे डर है कि इस विशेष अभ्यास के लिए पुनर्प्राप्ति (विलंबता) बहुत अधिक बाधा हो सकती है। –

+0

@BillH एक स्ट्रिंग में 4 बाइट्स को संशोधित करना जो पहले से ही स्मृति में संग्रहीत है, शायद ही कभी एक बाधा है। बेस 64 एन्कोडिंग करना एक हो सकता है, लेकिन आप पहले से किए गए मानों के लिए एन्कोडेड कैश को भी कार्यान्वित कर सकते हैं या (यदि आपके पास डेटा पर कुछ ज्ञान है) होने की उम्मीद है। हालांकि, उत्तरार्द्ध स्मृति खपत हिट करता है, जो सीपीयू उपयोग पर prio 1 है। – Lyth

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