2011-08-05 23 views
6

मैं PHP में छवि का औसत आरजीबी रंग प्राप्त करने की कोशिश कर रहा हूं।छवि का आरजीबी रंग औसत

जी.डी. lib से मैं प्रोग्राम यह

$x = imagesx($im); 
    $y = imagesy($im); 
    for ($i = 0;$i < $x;$i++) 
     for ($j = 0;$j < $y;$j++){ 
      $rgb = imagecolorat($im,$i,$j); 
      $sum['R'] += ($rgb >> 16) & 0xFF; 
      $sum['G'] += ($rgb >> 8) & 0xFF; 
      $sum['B'] += $rgb & 0xFF; 
     } 

लेकिन यह अच्छा तरीका है मुझे लगता है कि नहीं है। इसे संसाधित करने के लिए बहुत सारे राम की जरूरत है। क्या ऐसा करने का कोई और तरीका है?

+2

छवि को 1px x 1px में आकार देने के लिए एक अच्छा औसत – Willian

+2

@ विलियम: उपयोग करने वाले स्केलिंग एल्गोरिदम पर निर्भर हो सकता है। ;) – FrustratedWithFormsDesigner

उत्तर

5

मैं resampling के साथ जाना होगा:

$tmp_img = ImageCreateTrueColor(1,1); 
ImageCopyResampled($tmp_img,$im,0,0,0,0,1,1,$x,$y); // or ImageCopyResized 
$rgb = ImageColorAt($tmp_img,0,0); 
+2

डिफ़ॉल्ट resampling एल्गोरिदम क्या है? मुझे उम्मीद है कि यह निकटतम पड़ोसी नहीं है। –

3

एक तरह से यह करने के लिए सिर्फ एक पिक्सेल के लिए चित्र पैमाने पर और फिर एक संदर्भ के रूप में है कि पिक्सेल के रंग का प्रयोग है।

<?php 
$image = new Imagick('800x480.jpg'); 
$image->scaleImage(1, 1, true); 
$pixel = $image->getImagePixelColor(0,0); 

$red = ($rgb >> 16) & 0xFF; 
$green = ($rgb >> 8) & 0xFF; 
$blue = $rgb & 0xFF; 
?> 

इस तरह आपको गन्दा विवरणों को संभालने की आवश्यकता नहीं है। और आप बेहतर परिशुद्धता प्राप्त करने के लिए बेहतर स्केलिंग एल्गोरिदम का उपयोग कर सकते हैं।

संपादित करें: यदि आपको अधिक परिष्कृत एल्गोरिदम की आवश्यकता है तो आप Imagick::resizeImage का उपयोग कर सकते हैं। यह इंटरपोलेशन फ़िल्टर जैसे विभिन्न एल्गोरिदम का उपयोग कर सकते हैं।

+0

स्मारक स्केलिंग एल्गोरिदम इस मामले में बेहतर समाधान नहीं हैं। सही स्केलिंग एल्गोरिदम बस सभी पिक्सेल को गंतव्य पिक्सेल में औसत करेगा। उदाहरण के लिए बाइबिक कम सटीक होगा। –

+0

हां लेकिन यह कम सटीक होने की कीमत के साथ एक बहुत तेज़ और अधिक कुशल अहंकार होगा, क्योंकि यह आमतौर पर दक्षता के मामले में होता है। – Mehran

+1

सरल औसत से केवल "तेज और अधिक कुशल अहंकार" निकटतम पड़ोसी चयन होगा, जो सबसे खराब संभव परिणाम है - यह छवि के केंद्र के पास एक पिक्सेल चुन देगा। –

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