Sziasztok!
Először is köszöntök mindenkit, mert nagyon rég
jártam erre. Segítséget kérnék.
A feladat az, hogy egy nem interaktív C
programmal kéne rajzolni (szines pont kigyújtása,
két pont összekötése, téglalap kiszínezése) és
az eredményt valami szabványos (ppm, gif) formába
lementeni. Ha feliratozni is lehet, az bónusz,
de ez converttel elvégezhető.
X server a munka közben nincs, java nem jöhet
szóba.
Tudtok valami olyan könyvtárról, ami ezt
lehetővé teszi?
Előre is köszönöm: Végvári Lajos [meditor]
- 3273 megtekintés
Hozzászólások
Helló!
Szerintem te a ppmdraw-t keresed a netpbm csomagból:
http://netpbm.sourceforge.net/doc/ppmdraw.html
szerk.: Most nézem, hogy C programból kéne, de arra meg jó a libnetpbm. Ugyanezeket tudja.
Üdv,
zman
A fa mindig a moha északi oldalán nő.
- A hozzászóláshoz be kell jelentkezni
Nagyon köszi, megnézem.
Amúgy a fa a moha déli oldalán nő. Legalábbis az északi
féltekén. (-::
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Azt hittem ez már soha senkinek nem fog feltűnni :-)
Z
A fa mindig a moha északi oldalán nő.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Ahogy azt ígértem, ha lesz valami használható megoldásom a
témában, akkor azt közzé teszem.
Előzmények, röviden:
Ehhez a rendszerhez [ http://www.meditor.hu/imeadoc.php ]
kellett nekem valami, ami dinamkus grafikát készít. Némi
töprengés után az imagick rendszer convert programja
mellett döntöttem. A konkrét feladat: egy html lap alá
kell grafikont készíteni egy adatbázisból (dinamikusan)
leválogatott adatokból. Az eljárás a következő:
1. Egy html formon a leválogatás szempontjainak bekérése.
2. Adatleválogatás (cgi indít egy C-ben írt programot)
3. Szövegfájl legyártása convert részére a leválogatott
adatok alapján (szintén egy C progi)
4. Egy script meghívja a convertet, ami legyártja a képet (gif).
5. Az eredmény_html kiechozása.
Nézzük a convert körüli dolgokat, mert ezek képezik e topik témáját:
A convertet egy script hívja meg:
#!/bin/sh
#
# Meditor Digital Strategies since 1989.
# Sol omnibus lucet.
#
# This script is a pars of iMEA system.
# Draw creatinon by fly
# Végvári Lajos 2006.
#
OUT_PUT4=./rst_ndx.gif
# régi anyagok eltávolítása
if test -e $OUT_PUT4
then
rm -f $OUT_PUT4
fi
if test -e ./rst.mvg
then
rm -f ./rst.mvg
fi
# ha nincs semmi adat, üres fájl létrehozása
if ! test -e ./rst.body
then
touch ./rst.body
chmod ugo+rw ./rst.body
fi
# a convertnek átadott fájl létrehozása
# egy fix (head) és egy dinamikus (body) részből
cat < ./rst.head > ./rst.mvg
cat < ./rst.body >> ./rst.mvg
# a convert hívása
convert -size 800x720 -background gray32 \
rst.mvg \
$OUT_PUT4
#
# end of script
#
Nézzük meg mit is tartalmaz az rst.head!
Az egyes sorokban rajzoló utasítások vannak,
amelyeket a convert interpreterként működve
végrehajt az eredményt pedig az out_put fájlba teszi.
#
# beginning of rst.head
#
fill gray16
rectangle 89,49,791,651
fill black
line 89,49,791,49
line 90,110,790,110
line 90,170,790,170
line 90,230,790,230
line 90,290,790,290
line 90,350,790,350
line 90,410,790,410
line 90,470,790,470
line 90,530,790,530
line 90,590,790,590
line 89,651,791,651
line 89,49,89,651
line 160,50,160,650
line 230,50,230,650
line 300,50,300,650
line 370,50,370,650
line 440,50,440,650
line 510,50,510,650
line 580,50,580,650
line 650,50,650,650
line 720,50,720,650
line 791,49,791,651
fill gray80
rectangle 0,0,799,19
fill black
line 0,20,799,20
fill gray64
rectangle 0,690,799,767
fill black
line 0,690,799,690
fill black
font "/usr/X11R6/lib/fonts/TTF/Trebucit.TTF" font-size 14
text 458,712 'Meditor Digital Strategies since 1989. * www.meditor.hu'
line 0,708,454,708
line 0,0,799,0
line 0,0,0,719
line 0,719,799,719
line 799,0,799,719
font "/usr/X11R6/lib/fonts/TTF/AndaleMo.TTF" font-size 14
#
# end of rst.head
#
Végül nézzünk egy lehetsége body fájlt:
#
# beginning of body
#
fill black
text 4,16 '_test.user_ * Istvan_major * mind'
text 640,16 'NOP: 000017574 pcs'
text 624,42 '2006-sep-14'
text 720,42 '17:10:16'
fill white
text 5,653 ' +0.000'
text 5,593 ' +12.000'
text 5,533 ' +24.000'
text 5,473 ' +36.000'
text 5,413 ' +48.000'
text 5,353 ' +60.000'
text 5,293 ' +72.000'
text 5,233 ' +84.000'
text 5,173 ' +96.000'
text 5,113 ' +108.000'
text 5,53 ' +120.000'
text 96,42 'Fogy_most : kilogram '
fill white
point 90,649
line 90,649,90,554
line 90,554,90,549
line 90,549,90,554
line 90,554,90,549
line 90,549,90,554
line 90,554,789,644
line 789,644,790,644
fill gray80
text 117,670 '2006-sep-02'
text 130,684 '19:29:14'
text 255,670 '2006-sep-05'
text 268,684 '09:13:06'
text 395,670 '2006-sep-08'
text 408,684 '05:00:47'
text 535,670 '2006-sep-10'
text 548,684 '19:45:30'
text 675,670 '2006-sep-13'
text 688,684 '10:28:05'
#
# end of body
#
Ha ezt a mintát ügyesen lefuttatjátok, akkor egy
feliratozott grafikont kaptok. Jó kísérletezést
kívánok: Végvári Lajos [meditor]
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy nagyon láma vagyok, de én az ilyesmire imagemagickot használtam.
Csaba
- A hozzászóláshoz be kell jelentkezni
a 'convert' az ImageMagick csomag resze...
- A hozzászóláshoz be kell jelentkezni
bővebben:
http://www.boutell.com/gd/manual2.0.33.html#basics
Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)
/* Bring in gd library functions */
#include "gd.h"
/* Bring in standard I/O so we can output the PNG to a file */
#include
int main() {
/* Declare the image */
gdImagePtr im;
/* Declare output files */
FILE *pngout, *jpegout;
/* Declare color indexes */
int black;
int white;
/* Allocate the image: 64 pixels across by 64 pixels tall */
im = gdImageCreate(64, 64);
/* Allocate the color black (red, green and blue all minimum).
Since this is the first color in a new image, it will
be the background color. */
black = gdImageColorAllocate(im, 0, 0, 0);
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);
/* Draw a line from the upper left to the lower right,
using white color index. */
gdImageLine(im, 0, 0, 63, 63, white);
/* Open a file for writing. "wb" means "write binary", important
under MSDOS, harmless under Unix. */
pngout = fopen("test.png", "wb");
/* Do the same for a JPEG-format file. */
jpegout = fopen("test.jpg", "wb");
/* Output the image to the disk file in PNG format. */
gdImagePng(im, pngout);
/* Output the same image in JPEG format, using the default
JPEG quality setting. */
gdImageJpeg(im, jpegout, -1);
/* Close the files. */
fclose(pngout);
fclose(jpegout);
/* Destroy the image in memory. */
gdImageDestroy(im);
}
Én perl-ből használtam, működött, és nem kell shell szkipt, meg imageMagick vagy gnuplot.
- A hozzászóláshoz be kell jelentkezni
php gd nem lenne jó?
A bus station is where a bus stops. A train station is where a train stops. On my desk, I have a work station
- A hozzászóláshoz be kell jelentkezni
Én is épp erre gondoltam, ha amúgy is webes a cucc, akkor célszerűbbnek tartom, mint c-ben cgi-zni, átmeneti fájlokat kreálni és c-ből külső binárisokat hívogatni. Ráadásul ott a jpgraph, amivel tényleg 2 perc alatt lehet ilyesmit csinálni.
- A hozzászóláshoz be kell jelentkezni
Értem, amit mondtok, és biztosan van frappánsabb megoldás,
mint amit én csináltam, DE:
(1) A megoldáskészleznek ott kellett lennie a Slackware
disztroba.
(2) Nem PROGRAM kódot akartam dinamikusan generálni, hanem
egy adott program PARAMÉTER fájlját.
(3) mindenképpen fenn akartam tartani azt a lehetőséget,
hogy a programrészbe bármikor bele tudja nyúlni.
Ennek a három szempontnak leginkább az általam válaszott
megoldás felelt meg.
A CGI-ről: Biztonsági szempontból nagyon fontosnak
tartottam, hogy a unix filozófiának megfelelően kicsi,
jól áttekinthető, egy feladatra kifejlesztett, rövid
ideig futó programokból álljon a rendszer.
Szóval nagyon sok szempont van - nekem ez keveredett ki
megoldásként. Összességében elégedett vagyok a
működéssel. Gyors, pontos, áttekinthető.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
"(1) A megoldáskészleznek ott kellett lennie a Slackware
disztroba."
Hmm, nem gondoltam volna, de a Slackware Package Browser alapján valóban nincs sem php-gd, sem pedig jpgraph a disztróban. (Úgy látszik a debian elkényeztet :D)
"(2) Nem PROGRAM kódot akartam dinamikusan generálni, hanem
egy adott program PARAMÉTER fájlját."
Ez nyilvánvaló a fenti post alapján.
"(3) mindenképpen fenn akartam tartani azt a lehetőséget,
hogy a programrészbe bármikor bele tudja nyúlni."
Ezt kifejtenéd bővebben?
Az átmeneti fájlokkal és system()-ekkel épp biztonsági szempontból nem vagyok kibékülve - és most hangsúlyozom, ha eddig nem lett volna nyilvánvaló - _én személy szerint_ jobban szeretem, ha az adat _egy_ programon/scripten megy végig az sql szervertől a böngészőig.
- A hozzászóláshoz be kell jelentkezni
ad (3) - mivel nem tudom milyen igények fognak föllépni
még a felhasználók részéről, nem akartam olyan megoldásba
belemenni, ami esetleg a későbbiekben korlátozna. Számomra
a legnyagyobb szabadságot a saját magam által írt kód
adja.
system()-ekhez. Ne gondoljuk, hogy bármely rendszer (pl:
php) nem használ system hívásokat! Minél több réteg
rakódik egymásra, annál több a hibalehetőség. Szerintem...
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Nem kotekedeskeppen, de miert nem gnuplot?
Az adatokat legeneralod egy adatfileba, a graf-csili-vilit es a file-ba mentest egy gnuplot-makroba, es csak meghivod a gnuplot-ot, mar ahanyszor kell ...
Legalabbis az adott lapon nem lattam olyat, amit a gnuplot meg ne csinalna ...
De lehet hogy nem neztem figyelmesen ...
k.
- A hozzászóláshoz be kell jelentkezni
A gnu_plot alternatívaként átvillant az agyamon, valszeg
az döntött a convert mellett, hogy gyorsabban találtam
hozzá példát.
Az itt tárgyalt problémakör - miért egyedi program, miért
rajzgenerátor és miért cgi - szempontjából mindegy hogy
gnu_plot vagy convert, legalábbis azt hiszem.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni