Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как проще получить массив цветов из изображения
Форумы портала PHP.SU » » Графика в PHP » Как проще получить массив цветов из изображения

Страниц (1): [1]
 

1. Tek - 10 Января, 2014 - 12:01:10 - перейти к сообщению
Какую библиотеку лучше использовать? (GD,ImageMagick и пр) и если возможно алгоритм...
2. Ts.Saltan - 10 Января, 2014 - 19:15:58 - перейти к сообщению
Tek пишет:
Какую библиотеку лучше использовать? (GD,ImageMagick и пр) и если возможно алгоритм...

gd с этим справится
PHP:
скопировать код в буфер обмена
  1.  
  2.         function GetColorArray($img){  
  3.                 $im = ImgCreate($img);
  4.                 $width = imagesx($im);
  5.                 $height = imagesy($im);
  6.                
  7.                 $data = array();
  8.                 for($y=0; $y<$height; $y++)
  9.                 {
  10.                         for($x=0; $x<$width; $x++)
  11.                         {
  12.                                 $rgb = imagecolorat($im, $x, $y);
  13.                                 $data[$x][$y] = imagecolorsforindex($im, $rgb);
  14.                         }
  15.  
  16.                 }
  17.                 return $data;
  18.         }
  19.  
  20.        
  21.         function ImgCreate($img){ //Автоматически определит тип картинки
  22.                 $tm = explode(".", $img);
  23.                 $ext = strtolower($tm[sizeof($tm)-1]);
  24.                 $root = false;
  25.                 switch($ext){
  26.                 case 'jpg':
  27.                 case 'jpeg':
  28.                         $root = imagecreatefromjpeg($img);
  29.                 break;
  30.                 case 'gif':
  31.                         $root = imagecreatefromgif($img);
  32.                 break;
  33.                 case 'png':
  34.                         $root = imagecreatefrompng($img);
  35.                 break;
  36.                 case 'bmp':
  37.                         $root = imagecreatefrombmp($img);
  38.                 break;
  39.                 default:
  40.                         $root = imagecreatefromstring($img);
  41.                 }
  42.  
  43.                 if(!imageistruecolor($root)){
  44.                         $x = imagesx($root);
  45.                         $y = imagesy($root);
  46.                         $temp = imagecreatetruecolor($x, $y);
  47.                         imagecopy($temp, $root, 0, 0, 0, 0, $x, $y);
  48.                         imagedestroy($root);
  49.                         $root = $temp;
  50.                         unset($temp);
  51.                 }
  52.                 return $root;
  53.         }
  54.  
  55.         $colors = GetColorArray('image.jpg');
  56.         var_export($colors);
  57.  
3. Tek - 13 Января, 2014 - 07:47:07 - перейти к сообщению
Так я побывал, и данный способ не подходит ибо скрипт выполняется слишком долго...
4. Ts.Saltan - 13 Января, 2014 - 11:31:17 - перейти к сообщению
Tek пишет:
Так я побывал, и данный способ не подходит ибо скрипт выполняется слишком долго...

ясное дело, что долго, это ж php, он не предназначен для таких задач
5. Tek - 13 Января, 2014 - 13:08:21 - перейти к сообщению
Может кому пригодиться
PHP:
скопировать код в буфер обмена
  1. $imagege = new Imagick(/image.jpg");
  2.        $imagege->setImageFormat("GRAY"); //Конкретно для моей задачи достаточно гродаций серого
  3.        $colors_string = $imagege->getImageBlob();

Время на выполнение ~0,03с

 

Powered by ExBB FM 1.0 RC1