2011-08-05 42 views
6

php olarak rengin RGB renginin ortalamasını almaya çalışıyorum. gd lib tarafından Görüntüde rengin RGB renginin ortalaması

Ben

$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; 
     } 

programlamak Ama bence iyi bir yol değil. İşlenecek bir sürü koça ihtiyacı var. Bunu yapmanın başka bir yolu var mı?

+2

Görüntünün 1px x 1px olarak yeniden boyutlandırılması iyi bir ortalama vermek için kullanılır. – Willian

+2

@William: Kullanılmakta olan ölçekleme algoritmasına bağlı olabilir. ;) – FrustratedWithFormsDesigner

cevap

5

Ben örnekleyerek giderdim: Bunu yapmak için

$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

Varsayılan yeniden örnekleme algoritması nedir? Umarım en yakın komşu değildir. –

3

bir yolu sadece bir piksel için resmi ölçeklemek ve sonra bir referans olarak o pikselin renk kullanmaktır.

<?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; 
?> 

Böylelikle dağınık ayrıntıları işlemek zorunda kalmazsınız. Daha iyi bir hassasiyet elde etmek için daha akıllı ölçekleme algoritmalarını kullanabilirsiniz.

Düzenleme: Daha karmaşık bir algoritmaya ihtiyacınız varsa, bunun yerine Imagick::resizeImage'u kullanabilirsiniz. Interpolation filtresi gibi farklı algoritmalar kullanabilir.

+0

Akıllı ölçekleme algoritmaları bu durumda daha iyi bir çözüm değildir. Mükemmel ölçekleme algoritması, tüm kaynak pikselleri hedef piksele basitçe ortalar. Bicubic örneğin daha az doğru olur. –

+0

Evet, ancak genellikle verimlilik açısından olduğu gibi, daha az doğru olma fiyatıyla çok daha hızlı ve daha verimli bir algo olurdu. – Mehran

+1

Basit ortalamadan sadece "daha hızlı ve daha verimli algo", en yakın olası seçim olan en yakın komşu seçimidir; bu, görüntünün merkezine yakın bir piksel seçer. –

İlgili konular