2013-07-10 11 views
8

Tôi đang cố gắng tìm ra cách tôi có thể chuyển đổi một số color image thành các số.Chuyển đổi hình ảnh thành các chữ số bằng PHP?

Ví dụ: nếu tôi có hình ảnh như hình minh họa trong figure (b), làm cách nào để có được kết quả như figure (a) vào tệp văn bản?

enter image description here

+0

Bây giờ bạn đang nói về hình ảnh mức xám, nếu bạn muốn làm điều đó với một hình ảnh màu mỗi pixel sẽ có 3 số từ 0 đến 255. (đỏ: 0-255, xanh lá cây: 0-255, màu xanh : 0-255) –

+2

http://php.net/manual/en/function.imagecolorat.php Nó có thể được googled dễ dàng với "php hình ảnh màu pixel đọc" nếu bạn đã cho google một thử – zerkms

+0

Bạn có thể chia sẻ hình ảnh thực tế với chúng tôi? –

Trả lời

2

Tôi mất những gì đã ở here mà Mehdi Karamosly đề cập trong câu trả lời của mình và sửa đổi nó một số được một chút simipiler chút và tạo ra một sản lượng html đơn giản mà bạn có thể sửa đổi theo ý thích của bạn. Bạn có thể muốn thêm nhiều dữ liệu kiểm tra để đảm bảo tệp của nó/hình ảnh thực nếu bạn muốn thêm bảo mật. Tôi đã kiểm tra nó trên máy tính của tôi và nó hoạt động và hy vọng nó sẽ làm việc cho những gì bạn cần với một số sửa đổi (s).

function graycolor($img){ 
    list($width, $height) = getimagesize($img); 
    $mime = pathinfo($img, PATHINFO_EXTENSION); 
    switch($mime){#use appropriate function depending on image type 
     case 'jpg': 
     case 'jpeg': 
      $im = imagecreatefromjpeg($img); 
      break; 
     case 'png': 
      $im = imagecreatefrompng($img); 
      break; 
     case 'gif': 
      $im = imagecreatefromgif($img); 
      break; 
     default: 
      #invalid type 
      exit; 
    } 
    if(!is_color($img, $im)){#$img = string; $im = resource string 
     $ret = ""; 
     for($i = 0; $i < $height; $i++){#loop height pixels 
      for($ii = 0; $ii < $width; $ii++){#loop width pixels 
       $color = imagecolorat($im, $ii, $i); 
       $color = imagecolorsforindex($im, $color); 
       $ret .= $color['red'] . " "; 
      } 
       $ret .= "\n"; 
     } 
     return $ret; 
    }else{ 
     #$ret = ""; 
     #for($i = 0; $i < $height; $i++){#loop height pixels 
      #for($ii = 0; $ii < $width; $ii++){#loop width pixels 
       #$color = imagecolorat($im, $ii, $i); 
       #$color = imagecolorsforindex($im, $color); 
       #$ret .= $color['red'] . ", " . $color['green'] . ", " . $color['blue'] . " "; 
      #} 
       #$ret .= "\n"; 
     #} 
     return "color image"; 
    } 

} 
function is_color($img, $im){ 
    $times = 10;#number of times to check image for color 
    $iscolor = false; 
    list($width, $height) = getimagesize($img); 
    for($i = 0 ; $i < $times && !$iscolor; $i++){ 
     $color = imagecolorat($im, rand(0, $width), rand(0, $height));#get random cords 
     $color = imagecolorsforindex($im, $color);#get the random color's values 
     if($color['red'] !== $color['green'] || $color['green'] !== $color['blue']){ 
      $iscolor = true; 
      break; 
     } 
    } 
    return $iscolor; 
} 

echo graycolor('color.jpg');#outputs color image 
echo graycolor('gray.jpg');#outputs numbers 
+0

cảm ơn bạn rất nhiều vì đã giải thích cho tôi với một ví dụ chi tiết. đã giúp rất nhiều. –

+0

@ Kính đó là một lời giải thích tốt đẹp. nhưng điều này không chuyển đổi hình ảnh màu thành số. Bạn có thể vui lòng cho chúng tôi biết cách chuyển đổi hình ảnh màu thành số không? –

+0

@NewGuy Tôi đã thêm một cách để lấy số màu sẽ cung cấp cho bạn 'r, g, b' và bạn có thể tìm kiếm trên SO theo các cách nếu bạn muốn số ở một số định dạng khác. – Class

2

Bây giờ bạn đang nói về hình ảnh mức xám, nếu bạn muốn làm điều đó với một hình ảnh màu mỗi điểm ảnh sẽ có 3 số từ 0 đến 255. (đỏ: 0-255, xanh lá cây: 0- 255, màu xanh: 0-255)

Nếu bạn quan tâm đến hình ảnh màu xám quy mô một quy tắc quan trọng bạn cần phải biết là:

// một Pixel là Greyscale nếu r = B = G

dựa trên số post này.

Hãy xem php function này:

http://php.net/manual/en/function.imagecolorat.php