2014-01-24 254 views
1

我想计算在PHP中的图像(PNG或JPG)的平均颜色。php平均颜色图像PNG格式

我想要一个快速计算平均颜色的小脚本。

我试过将图像大小调整为1px 1px,但我没有成功。我一直有恩的错误是这样的:: imagesx() expects parameter 1 to be resource, string given in

这里我的PHP:

$post_thumb = wp_get_attachment_url(get_post_thumbnail_id()); 
$img = $post_thumb; 
$x = imagesx($img); 
$y = imagesy($img); 
$tmp_img = ImageCreateTrueColor(1,1); 
ImageCopyResampled($tmp_img,$img,0,0,0,0,1,1,$x,$y); 
$rgb = ImageColorAt($tmp_img,0,0); 

我知道它来自我的形象变种,但我不知道如何解决它...

回答

0

心中已经得到了它的平均颜色,它是从我的VAR对象一个问题:

$img = @imagecreatefromstring(file_get_contents($post_thumb)); 
$x = imagesx($img); 
$y = imagesy($img); 
$tmp_img = ImageCreateTrueColor(1,1); 
ImageCopyResampled($tmp_img,$img,0,0,0,0,1,1,$x,$y); 
$rgb = ImageColorAt($tmp_img,0,0); 
$r = ($rgb >> 16) & 0xFF; 
$g = ($rgb >> 8) & 0xFF; 
$b = $rgb & 0xFF; 
+0

谢谢,你救了我不得不自己弄清这个代码,完美地满足我的需求! – Codemonkey

0

洛洛,这是我的功能使用要有一个头像

function average($img) 
{ 
    $w = imagesx($img); 
    $h = imagesy($img); 
    $r = $g = $b = 0; 
    for($y = 0; $y < $h; $y += 2) { 
     for($x = 0; $x < $w; $x++) { 
      $rgb = imagecolorat($img, $x, $y); 
      $r += $rgb >> 16; 
      $g += $rgb >> 8 & 255; 
      $b += $rgb & 255; 
     } 
    } 
    $pxls = $w * $h; 
    $r = dechex(round($r/$pxls)); 
    $g = dechex(round($g/$pxls)); 
    $b = dechex(round($b/$pxls)); 
    if(strlen($r) < 2) { 
     $r = 0 . $r; 
    } 
    if(strlen($g) < 2) { 
     $g = 0 . $g; 
    } 
    if(strlen($b) < 2) { 
     $b = 0 . $b; 
    } 
    return "#" . $r . $g . $b; 
} 
+0

谢谢你的回答,但我的代码已经和以前完全一样了...... – lolo

+0

你应该试着检查你给imagesx()的参数,看看它是否是一个资源 – dincan

+0

I解决了我的问题。看到我的答案。 – lolo