Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> График в виде картинки, есть примеры? 
:(
    Опции темы
igorold
Дата 23.5.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 3
Всего: 17



Необходимо в Perl-скрипте создать график в виде картинки и потом ее показывать в HTML-шаблоне.

ОС - Линукс ... 

каким пакетом оптимальнее воспользоваться и можно привести ссылочку или кусок работающего кода ... плиииз ...


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
amg
Дата 23.5.2007, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Обычно, насколько знаю, для этого обычно используют GD. Но мне не приходилось.
У меня есть пример с gnuplot (д.б. в любом линуксе). Создается gif с графиком.
Код

$label_color = 'xadd8e6';
$line_color  = 'xff0000';
#       xffffff white     #     xffa500 orange              #   x0000ff blue 
#       x000000 black           #       x66cdaa medium aquamarine       #      
#       x404040 gray            #       xcdb5cd thistle 3                      
#       xff0000 red                     #       xadd8e6 light blue 
$line_style  = 'lines'; # 'linespoints'
$smooth = 'smooth csplines'; # ''
$no_axes = 'set noborder; set noarrow; set noxtics; set noytics';
#$no_axes = ''; #Раскоментировать, если нужны оси координат

$sizeX = 800; $sizeY = 700;

open GR, ">g_r_a_f_i_k.tmp" or die "$!\n";
print GR $_, "\t", $_**2, "\n" for -3..3;
close GR;

open GP, "| gnuplot" or die "$!\n";
print GP "set terminal gif medium transparent size $sizeX,$sizeY \\
          xffffff $label_color x404040 $line_color\n";
print GP "set output 'g_r_a_f_i_k.gif'\n";
print GP "set autoscale; set nokey; $no_axes\n";
print GP "set label 'O' at 1,1 center\n";
print GP "plot 'g_r_a_f_i_k.tmp' $smooth with $line_style";
close GP;

unlink 'g_r_a_f_i_k.tmp' if -f 'g_r_a_f_i_k.tmp';


PM MAIL   Вверх
GoodBoy
Дата 23.5.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



igorold
use Image::Magick;

Добавлено через 1 минуту и 14 секунд
http://imagemagick.org/script/perl-magick.php


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Nab
Дата 23.5.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



А я бы SVG заюзал.... smile

По моему самое многообещающее внедрение...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
igorold
Дата 25.5.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 3
Всего: 17



Скрипт при запуске выдал ошибку:
Код

Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux/auto/Image/Magick/Magick.so' for module Image::Magick: libMagick.so.10: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога at /usr/lib/perl5/5.8.8/i386-linux/DynaLoader.pm line 230.
 at go.pl line 3
Compilation failed in require at go.pl line 3.
BEGIN failed--compilation aborted at go.pl line 3.

[1]+  Stopped                 perl go.pl


хотя такой файл есть :  /usr/lib/perl5/site_perl/5.8.8/i386-linux/auto/Image/Magick/Magick.so
Код

#!/usr/bin/perl

use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("img_0013.jpg"); #открываем файл
($ox,$oy)=$image->Get('base-columns','base-rows'); #определяем ширину и высоту изображения

$nx=int(($ox/$oy)*150); #вычисляем ширину, если высоту сделать 150
$image->Resize(geometry=>geometry, width=>$nx, height=>150); #Делаем resize (изменения размера)
if($nx>200) { #Если ширина получилась больше 200
$nnx=int(($nx-200)/2); #Вычисляем откуда нам резать
$image->Crop(x=>$nnx, y=>0); #Задаем откуда будем резать
$image->Crop('200x150'); #С того места вырезаем 200х150
}
$x = $image->Write("photo.jpg"); #Сохраняем изображение.

1;




--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
amg
Дата 25.5.2007, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



igorold, нужно график функции нарисовать или просто работа с графикой? Для последнего ImageMagick подходит отлично, но нарисовать там какую-то хитрую линию - что-то я не помню, чтоб было легко.
PM MAIL   Вверх
igorold
Дата 25.5.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 3
Всего: 17



ну да, именно графики рисовать, с графикой работать не надо ... 

Твой пример вылетает на строке 
open GP, "| gnuplot" or die "$!\n"

Это сообщение отредактировал(а) igorold - 25.5.2007, 11:45


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
amg
Дата 25.5.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(igorold @  25.5.2007,  09:03 Найти цитируемый пост)
ну да, именно графики рисовать
Ну тогда глянь, можно ли с помощью ImageMagick нарисовать график, прежде чем этот пакет ставить. Я, например, о такой возможности ImageMagick не знаю, хотя уважаемый GoodBoy говорит, что можно. 

Кстати, Nab, расскажи (или ссылку дай), пожалуйста, как для рисования графиком SVG использовать.
PM MAIL   Вверх
Nab
Дата 25.5.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Цитата(amg @  25.5.2007,  09:25 Найти цитируемый пост)
Кстати, Nab, расскажи (или ссылку дай), пожалуйста, как для рисования графиком SVG использовать.

Ввел меня в курс, Иван Сагалаев http://softwaremaniacs.org/blog/2005/12/25/svg-experiments/, как впрочем и многое другое он мне рассказал smile вторая часть про SVG http://softwaremaniacs.org/blog/2005/12/26...css-insane-mix/.

Официальный стандарт
http://www.w3.org/Graphics/SVG/

Вот здесь мне понравилось как написано, по русски и с примерами smile
http://viju.tvercity.net/articles/svgformat


И еще интересный ресурс
http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm

А вот примеры SVG, если не показывает, значит у вас нет поддержки в броузере...
http://devfiles.myopera.com/articles/76/SolarSystem2.svg
http://dev.opera.com/articles/view/drawing...urves-with-svg/
Или поставьте плагин или пользуйтесь "нормальными" броузерами smile


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
amg
Дата 25.5.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(igorold @  25.5.2007,  09:03 Найти цитируемый пост)
Твой пример вылетает на строке open GP, "| gnuplot" or die "$!\n"
А gnuplot стоит? Если есть шелл, то проверь: which gnuplot || locate gnuplot

Еще лучше использовать GD. По возможностям работы с изображениями эта библиотека, пожалуй, проигрывает ImageMagick, зато быстрее и в ней можно всякие графики рисовать (GD::Graph).

Опять же, SVG. Хотя тут опасность есть (насчет нормальных браузеров, см. пост Nab'а).


PM MAIL   Вверх
amg
Дата 25.5.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Nab, посмотрел ссылки. Спасибо. Впечатляет. Но, насколько я понял, в SVG, все же не заложена возможность непосредственно рисовать графики функций (например, мне чаще всего требуется нарисовать график по точкам из таблицы со сглаживанием сплайнами). Для этого нужны сторонние библиотеки?
PM MAIL   Вверх
igorold
Дата 25.5.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 3
Всего: 17



Цитата(amg @  25.5.2007,  12:05 Найти цитируемый пост)
А gnuplot стоит? Если есть шелл, то проверь: which gnuplot || locate gnuplot

... ну да .. конечно .. не было установлено ... получилось!!!
для начала пойдет ... что посложнее потом попробую ... кстати GD я устанавливал, но чего то ему не хватает и он не работает у меня ... 


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
amg
Дата 25.5.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Ну, раз получилось, то вот простейщий пример (в предыдущем я намеренно оставил все опции gnuplot, которые были у меня, вообще же gnuplot - мощнейший пакет для рисования графиков, ручек, за которые можно подергать, великое множество, достаточно сказать, что документация к нему - классический пример "огромной html-ки")
Код

open GP, "| gnuplot" or die "$!\n";
print GP "
set terminal gif
set output 'g_r_a_f_i_k.gif'
plot [-3:3] x**2
";
close GP;


А про GD - эти модули - это, насколько я понимаю, лишь Perl-интерфейс к gdlibs. Т.е., чтобы модуль заработал, нужно установить сначала соответствующие библиотеки. Кстати, аналогичная ситуация с ImageMagick.

Это сообщение отредактировал(а) amg - 25.5.2007, 15:23
PM MAIL   Вверх
Ramirez
Дата 7.6.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Я во в последнее время склоняюсь больше в варианту апплета ли еще лучше flash. на страницу вставляется флешка, которая умеет рисовать разные графики (zxChart например) и ей скармливаются циферки или ссылка на скрипт который циферки отдает. и нагрузка на сервер меньше и возможностей больше.

А если такой вариант не прокатывает - я бы не стал заморачиваться с GD а взял модули от RRDTOOL. 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.