2009-11-17 14 views
9

मैं पृष्ठभूमि के रूप में divs या table के अंदर छवियों को प्रदर्शित करना चाहता हूं। अगर वे छवियां काफी बड़ी नहीं हैं, तो मुझे उस छवि के बाहरी रंग को खोजने की आवश्यकता होगी और इसे युक्त div या table सेल की पृष्ठभूमि पर लागू करें।छवि रंग प्राप्त करें

क्या किसी के पास इसका अनुभव है? PHP में मैं एक नोब हूँ इसलिए कृपया समझाओ। बहुत बहुत धन्यवाद

+0

कभी यह काम कर रहा है? –

उत्तर

23

GD functions देखें।

सबसे आम रंग खोजने के लिए looping through the pixels का समाधान यहां दिया गया है। हालांकि, you could just resize the image to 1 pixel - यह औसत रंग होना चाहिए - सही?

1px विधि का एक उदाहरण (अब परीक्षण पृष्ठ सहित):

<?php 
    $filename = $_GET['filename'];  
    $image = imagecreatefromjpeg($filename); 
    $width = imagesx($image); 
    $height = imagesy($image); 
    $pixel = imagecreatetruecolor(1, 1); 
    imagecopyresampled($pixel, $image, 0, 0, 0, 0, 1, 1, $width, $height); 
    $rgb = imagecolorat($pixel, 0, 0); 
    $color = imagecolorsforindex($pixel, $rgb); 
?> 
<html> 
    <head> 
    <title>Test Image Average Color</title> 
    </head> 
    <body style='background-color: rgb(<?php echo $color['red'] ?>, <?php echo $color['green'] ?>, <?php echo $color['blue'] ?>)'> 
    <form action='' method='get'> 
     <input type='text' name='filename'><input type='submit'> 
    </form> 
    <img src='<?php echo $filename ?>'> 
    </body> 
</html> 

यहाँ औसत सीमा रंग, पहली कड़ी के लिए इसी तरह की खोज के लिए कुछ उदाहरण कोड है। अपने उपयोग के लिए इस बेहतर कार्य कर सकता (मैं जानता हूँ कि इस कोड को अक्षम है, लेकिन उम्मीद है कि यह पालन करने के लिए आसान है):

<?php 
    $filename = $_GET['filename'];  
    $image = imagecreatefromjpeg($filename); 
    $width = imagesx($image); 
    $height = imagesy($image); 

    for($y = 0; $y < $height; $y++){ 
    $rgb = imagecolorat($image, 0, $y); 
    $color = imagecolorsforindex($image, $rgb); 
    $red += $color['red']; 
    $green += $color['green']; 
    $blue += $color['blue']; 

    $rgb = imagecolorat($image, $width -1, $y); 
    $color = imagecolorsforindex($image, $rgb); 
    $red += $color['red']; 
    $green += $color['green']; 
    $blue += $color['blue']; 
    } 

    for($x = 0; $x < $height; $x++){ 
    $rgb = imagecolorat($image, $x, 0); 
    $color = imagecolorsforindex($image, $rgb); 
    $red += $color['red']; 
    $green += $color['green']; 
    $blue += $color['blue']; 

    $rgb = imagecolorat($image, $x, $height -1); 
    $color = imagecolorsforindex($image, $rgb); 
    $red += $color['red']; 
    $green += $color['green']; 
    $blue += $color['blue']; 
    } 

    $borderSize = ($height=$width)*2; 
    $color['red'] = intval($red/$borderSize); 
    $color['green'] = intval($green/$borderSize); 
    $color['blue'] = intval($blue/$borderSize); 

?> 

अद्यतन: मैं कुछ more refined code on github डाल दिया। इसमें सीमा का औसत, और पूरी छवि औसत दोनों शामिल हैं। यह ध्यान दिया जाना चाहिए कि 1 पिक्सल का आकार बदलना हर पिक्सेल स्कैनिंग से कहीं अधिक संसाधन अनुकूल है (हालांकि मैंने कोई वास्तविक समय परीक्षण नहीं चलाया है), लेकिन कोड तीन अलग-अलग तरीकों को दिखाता है।

+0

आकार बदलने के कुछ परीक्षणों को चलाएं और ऐसा लगता है कि यह काम करता है। –

+0

क्षमा करें, लेकिन मैं एक नौसिखिया हूं, मैं इसे पृष्ठभूमि रंग के लिए एक div पर कैसे लागू करूं? कोई विचार टिम। इसका सुझाव देने के लिए धन्यवाद, इसका मतलब बहुत है। –

+0

ओह मुझे देखने दो कि क्या मैं यह काम कर सकता हूं, धन्यवाद TIM –

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