2011-10-11 24 views
25

Làm cách nào để tôi có thể phát hiện 2 màu trên cùng của Hình ảnh trong PHP?Phát hiện màu cho Hình ảnh bằng cách sử dụng PHP

ví dụ tôi có hình ảnh này:

enter image description here

Chức năng này/quá trình sẽ trở lại: 0000FF hoặc xanhFFFF00 hoặc VÀNG

Cảm ơn

+2

Đây có thể là một cái gì đó cho bạn: http://stackoverflow.com/questions/3468500/detect-overall-average-color-of-the-picture – samn

+0

nhờ, đó là tuyệt vời. Bạn có thể đặt nó như là một câu trả lời? – Tech4Wilco

Trả lời

20

Đây là một scr ipt sẽ cung cấp cho bạn danh sách:

function detectColors($image, $num, $level = 5) { 
    $level = (int)$level; 
    $palette = array(); 
    $size = getimagesize($image); 
    if(!$size) { 
    return FALSE; 
    } 
    switch($size['mime']) { 
    case 'image/jpeg': 
     $img = imagecreatefromjpeg($image); 
     break; 
    case 'image/png': 
     $img = imagecreatefrompng($image); 
     break; 
    case 'image/gif': 
     $img = imagecreatefromgif($image); 
     break; 
    default: 
     return FALSE; 
    } 
    if(!$img) { 
    return FALSE; 
    } 
    for($i = 0; $i < $size[0]; $i += $level) { 
    for($j = 0; $j < $size[1]; $j += $level) { 
     $thisColor = imagecolorat($img, $i, $j); 
     $rgb = imagecolorsforindex($img, $thisColor); 
     $color = sprintf('%02X%02X%02X', (round(round(($rgb['red']/0x33)) * 0x33)), round(round(($rgb['green']/0x33)) * 0x33), round(round(($rgb['blue']/0x33)) * 0x33)); 
     $palette[$color] = isset($palette[$color]) ? ++$palette[$color] : 1; 
    } 
    } 
    arsort($palette); 
    return array_slice(array_keys($palette), 0, $num); 
} 

$img = 'icon.png'; 
$palette = detectColors($img, 6, 1); 
echo '<img src="' . $img . '" />'; 
echo '<table>'; 
foreach($palette as $color) { 
    echo '<tr><td style="background:#' . $color . '; width:36px;"></td><td>#' . $color . '</td></tr>'; 
} 
echo '</table>'; 
+5

Bạn về cơ bản chỉ cần sao chép mã của trang mà tôi đã sử dụng. Cách để đi ... – samn

+3

và tôi đã thêm sửa nhưng có đúng là – rcs20

+4

Tôi sẽ tối ưu hóa điều này bằng cách thay thế Trường hợp chuyển đổi bằng '$ img = @imagecreatefromstring (file_get_contents ($ image));' để bạn có thể xử lý các loại hình ảnh khác nhau hiệu quả ... – Andres

0

Nếu bạn không thể gọi tiện ích bên ngoài, Imagemagick có thể tạo biểu đồ cho bạn. Nó có thể sẽ nhanh hơn nhiều so với việc thực thi PHP.

Về cơ bản, lệnh này sẽ cho bạn một danh sách các màu sắc, sắp xếp theo chủ đạo nhất đầu tiên:

convert 'http://i.stack.imgur.com/J2txV.png' -format %c histogram:info:-|sort -r 

Bạn có thể muốn để lập bản đồ hình ảnh vào một bảng cố định đầu tiên ("Vòng off" màu sắc). Đây là những gì tôi sử dụng:

convert 'http://i.stack.imgur.com/J2txV.png' -modulate 100,200,100 -remap 'http://i.stack.imgur.com/GvTqB.png' -format %c histogram:info:-|sort -r 
Các vấn đề liên quan