Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оцифровка графика средствами PHP
 
 автор: pandora2009   (03.02.2009 в 10:31)   письмо автору
4.4 Кб
 
 

Необходим простенький алгоритм, к сожалению я не знаю php, а для спеца это пара минут.
Есть картинка с графиком ( в прицепе). Алгоритм следующий - берем нижнюю левую точку картинки и идем вверх по оси у, до встречи с точкой графика. Пишем значение У в массив. Далее, через 5 пикселов по Х ( это будет шаг) делаем тоже самое и пишем в массив 2-е значение. И так до конца оси Х, либо можно задать в ручную это кличество итераций.
После этого, записать этот массив в txt файл, между значениями разделитель /n

  Ответить  
 
 автор: sim5   (03.02.2009 в 11:51)   письмо автору
 
   для: pandora2009   (03.02.2009 в 10:31)
 

<?
$im 
imagecreatefromgif("graph.gif");
$xc imagesx($im);
$yc imagesy($im);
$coords = array();
//это установка индекса для специфинированного цвета, в данном случае синего 
$idx imagecolorclosest($im00255);
//ну а остальное и ежу понятно
for ($i 0$i $xc$i++) {
  for (
$k 0$k $yc$k += 5) {
    if (
$idx == imagecolorat($im$i$k)) $coords[] = array('x'=>$i'y'=>$k);
  }
}
echo 
"<pre>";
print_r($coords);
echo 
"</pre>";

Как надо записать массив в текст - просто числа через разделитель (только не /n, а \n), либо лучше ассоциативный массив, думайте сами.

  Ответить  
 
 автор: Trianon   (03.02.2009 в 12:41)   письмо автору
 
   для: sim5   (03.02.2009 в 11:51)
 

там картинку перевернуть надо.
Кроме того, на вертикальных участках есть неоднозначность.
У меня вышло так:
<?php

  $m 
imagecreatefromgif("graf.gif");
  
$h imagesy($m);
  
$w imagesx($m);
  
$v = array();$s '';
  for(
$x 0$x $w $v[$x++] = strrev($s))
    for(
$s '',$y 0$y $h $y++)
    {
        
$c imagecolorat($m$x$y);
        @
$g[$c]++;
        
$s .= chr($c);
    }

   foreach(
$g as $c => $n)
   {
      
$l imagecolorsforindex($m$c);
      if( 
abs($l['red']-$l['green']) +
          
abs($l['blue']-$l['green'])+
          
abs($l['blue']-$l['red']) > 0)
         
$j $c;
   }
   foreach(
$v as $x => $l)
   {
      
$y0 strpos($lchr($j));
      
$y1 strrpos($lchr($j));
      echo 
"$x  $y0  $y1<br>";
   }
?>

  Ответить  
 
 автор: sim5   (03.02.2009 в 12:43)   письмо автору
 
   для: Trianon   (03.02.2009 в 12:41)
 

Зачем перевернуть и какая неоднозначность?

  Ответить  
 
 автор: Trianon   (03.02.2009 в 12:49)   письмо автору
 
   для: sim5   (03.02.2009 в 12:43)
 

показания на графике отсчитываются от оси X вверх.
А нумерация линий в картинке - сверху вниз.
А неоднозначность в том, что каждый отсчет по Х представлен вертикальной линией из нескольких пикселей. Ну да это больше к автору вопроса.
Хотя он, судя по формулировке, вообще под ключ хочет... кривой...

  Ответить  
 
 автор: sim5   (03.02.2009 в 13:07)   письмо автору
 
   для: Trianon   (03.02.2009 в 12:49)
 

А, вот в чем дело. Ну да, надо от начальных координат (0,0) было считать. Ну это не проблема, стоит только начальные значения сметить или в обратном порядке пройти цикл.
Ну а в другом проблем не вижу - индекс цвета будут точно определен на пересечении координат. А то что по несколько пикселей по Х.., так как я понял это не важно.

PS. Не знаю как автору надо, но мне кажется, что удобнее массив держать, потому бы сделал в конце цикла просто:
<?
file_put_contents
("coords.txt"serialize($coords));
//и получал
$coords unserialize(file_get_contents("coords.txt"));

  Ответить  
 
 автор: pandora2009   (03.02.2009 в 13:36)   письмо автору
 
   для: sim5   (03.02.2009 в 13:07)
 

Спасибо огромное всем!!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования