LINUX.ORG.RU

Формирование изображений на С: чем удобнее?


0

0

Вот такой вопрос. Кто чем генерирует изображения для отображения на веб-страницах? И в каких форматах?

Можно, например, формировать картинку попиксельно, сжимать jpeg'ом и подгружать javascript'ом новые картинки по мере формирования. Другой вариант, о котором я думал: векторная графика. Но с devel-библиотеками svg я еще не работал.

Что посоветуете?

☆☆☆☆☆

>Кто чем генерирует изображения для отображения на веб-страницах? И в каких форматах?

Ну ImageMagick же. Была еще какая-то библиотека, которая совсем не использовала иксы ( в бинарных дистрибутивах у imagemagick обычно с поддержкой иксов собирается, что раздражает ) и скорость была получше, но я так давно это использовал, что забыл. Может FreeImage, а может и нет, надеюсь тут подскажут.

Можно, например, формировать картинку попиксельно, сжимать jpeg'ом и подгружать javascript'ом новые картинки по мере формирования. Другой вариант, о котором я думал: векторная графика. Но с devel-библиотеками svg я еще не работал.


Так тебе как именно и когда именно надо генерировать?

И это - почему именно на C?

volh ★★
()

SVG можно генерировать как текст через printf/sprintf, но это уныло и не кому не нравится(особенно мне).

Формировать при помощи libxml2 и подобных по своей простоте и удобству идентично предыдущему варианту.

Сочинять XSLT и свой DSL на основе XML. Мне лично удобно, но за скорость работы libxslt и остальных я не ручаюсь(и не всякий сишник захочет иметь дело с XSLT). Хотя тут процесс конвертации легко перевести на сторону клиента.

JavaScript тоже на стороне клиента, но процесс его генерации не на много проще собственно самой генерации SVG. Зато заметно экономит трафик.

SV0L0CH
()
Ответ на: комментарий от volh

Есть набор термодатчиков, стоит задача визуализировать графически их показания (различными цветовыми полосами). А на С потому, что это наиболее эффективный язык программирования, на чем же еще CGI писать?

А за ImageMagic спасибо, не думал, что у него есть еще и devel-библиотеки, нашел magick-wand, возможно, подойдет.

А как насчет векторных изображений? Работа с ними не проще будет?

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от SV0L0CH

SVG можно генерировать как текст через printf/sprintf

А разве нет каких нибудь svg-библиотек в духе того же ImageMagic'а? Все-таки, xml - один из самых дерьмовых форматов, а формировать его вручную - вообще жесть...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от hizel

пусть рисует клиент

Я хочу картинку готовить на сервере. Представьте, какой объем займет JS-код для расчета температурных градиентов и формирования изображения в браузере... А так - постоянно работающий демон периодически записывал бы в определенный файл картинку, а браузеру нужно только брать эту картинку, а когда информация обновится (об этом можно узнавать при помощи запросов из JS) - обновлять iframe с картинкой.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от hizel

Я же уже писал, что этот вариант не подходит из-за своей тормознутости, да и не справится JS с такой задачей.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

А отдавать можно и изменения к картинке.

Основные расчёты тоже можно проводить на сервере, а отдавать минимальные данные необходимые для отрисовки.

Если задействовать SVG, то необходимости многих рачсётов можно избежать так как отрисовка происходит встроеными средствами без попиксельного расчёта. Думаю, с температурными градиентами SVG справится.

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

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

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от lester

По-моему, libgd даже лучше ImageMagic (по крайней мере, из прочитанного по диагонали, работать с libgd проще).

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

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

Примеры можно брать здесь http://www.w3.org/TR/2003/REC-SVG11-20030114/index.html

Что касается примеров на JavaScript то можно попробовать погуглить. Свои наработки опубликовать у меня всё руки никак не доходят. Да и в порядок их надо бы привести.

Библиотека jquery.svg.js у меня почемуто некорректно работала, потому пока обхожусь без неё. Тем не мение в описании к ней есть примеры.

SV0L0CH
()
Ответ на: комментарий от Eddy_Em

>А как насчет векторных изображений? Работа с ними не проще будет?

Ну раз у тебя приложение не для всего мира и не надо париться насчет поддержки svg, то может и проще. Можно просто формировать на сервере svg'шный xml и передавать его на клиенты в готовом виде, а можно пересылать клиентам только показания датчиков, и визуализировать с помощью javascript-обвязок, скажем http://keith-wood.name/svg.html - это на самом деле быстро и легко, ведь параметры градиента и всего прочего тоже можно высчитывать на сервере и передавать.

volh ★★
()
Ответ на: комментарий от Eddy_Em

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

Но если ты реально гонишься за скоростью и оптимизацией то тогда ты в неправильном направлении. Перерисовывай графики on demand и только те которые запросили, а не регенирировать всё подряд каждую минуту.

Ну и нафига градиенты на графике температуры не очень представляю, и так понятно куда катится температура. Я через mrtg подобные задачи решал.

true_admin ★★★★★
()

Всем спасибо, буду экспериментировать с тем, что насоветовали :)

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от dizza

Мне нужны не графики. Поясню. Есть помещение, в нем расположено порядка 30-50 термодатчиков. Нужно визуализировать их показания:

1. Отобразить стрелочками градиенты температур

2. Отобразить в цветовой гамме распределение температур

3. Еще неплохо, если все это будет вращаться (т.к. распределение датчиков неоднородно, и нужно показывать картинку из разных ракурсов).

Сейчас сижу разбираюсь с cvg: учусь строить градиенты и вращать/двигать картинку.

Eddy_Em ☆☆☆☆☆
() автор топика

Есть такое замечание.

Иногда генерация изображения по данным весьма нетривиальное дело, и на клиента возложена быть не может, и даже OpenDX не справляется с этой задачей успешно.

Так что, формирование изображений на сервере часто есть правильнейшее решение.

Насчет on demand следует быть осторожнее. Если некто запросил подряд 1000 раз сформировать картинку по одним и тем же данным, пока они не обновились, ее нет смысла генерировать 1000 раз.

anonymous
()
Ответ на: комментарий от Eddy_Em

Да, кстати, гляньте на OpenDX... Есть там одна фича-экспорт в VRML... Посмотреть и разобраться-максимум пол часа, а может как раз то что нужно вам. Хотя не гарантирую.

anonymous
()

Посмотри в исходники mrtg, там тоже графики генерят

lester_dev ★★★★★
()
Ответ на: комментарий от anonymous

Да, кстати, гляньте на OpenDX...

Честно говоря, я не нашел на сайте разработчика вообще никаких руководств по программированию с подключением этой библиотеке. Да и уж больно крутая она... Сомневаюсь, что можно за недельку-другую осилить.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

OpenDX это не просто библиотека, но библиотеку включает в себя. Руководство по программированию с ее подключением внутри дистрибутива. Она эффективна, если требуется сложная визуализация данных.

anonymous
()
Ответ на: комментарий от Eddy_Em

> 1. Отобразить стрелочками градиенты температур

2. Отобразить в цветовой гамме распределение температур

plplot

anonymous
()
Ответ на: комментарий от anonymous

plplot

О, это еще ближе, спасибо. Если с 3D-SVG не получится, попробую генерировать картинки на сервере при помощи plplot. Во всяком случае, такой кучи кода, как для работы с ImageMagic не надо писать...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от anonymous

>Возможно, svg здесь не вариант. Вам ведь 3D изображение нужно?

Я вот уже тоже не уверен в удобстве построения такой проэкции средствами SVG.

Сначала думал брать кажый термодатчик, строить вокруг него максимальный допустимый выпуклый многоугольник и закрашиваить с плавным переходом в прозрачность. А теперь думаю как в таком случае быть с границами комнаты и с последовательностью наложения цветов.

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

Имеем показания температуры в нескольких точках расположения датчиков, может быть имеет смысл получить вначале распределение температур во множестве M точек, удобном для визуализации?

Множество M выбираем уже в зависимости от используемого средства визуализации данных.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.