ein Kapitel zurück                                           ein Kapitel weiter

Wie man ein neues Image erstellt haben sie bereits im Kapitel zuvor kennen gelernt.

 /*image initialisieren*/
 gdImagePtr image;
 /*Wir erzeugen ein Image mit 100x100 Pixel*/
 image=gdImageCreate(100,100);

Nun ist es auch möglich bereits erstellte Grafiken oder Bilder einzulesen. Nehmen wir gleich unser Bild vom Beispiel zuvor.......



Bild Nummer 1


gdImagePtr image;
FILE *png;
png = fopen("./bild1.png","rb");
if(png==NULL) { /*Fehler*/ exit(0); }
image = gdImageCreateFromPng(png);
fclose(png);

Wir öffnen unser Image ganz normal mit einem Stream und erstellen anschließend ein neues Image mittels.........

image = gdImageCreateFromPng(png);

Dieses Image können wir nun wieder nach belieben bearbeiten. Denn Filehandle sollten anschließend wieder schließen, da dies nicht automatisch geschieht. Wollen wir nun bild1.png weiterbearbeiten....

/*Download:gd2.c*/

#include <stdio.h>
#include <gd.h>

int main()
{
 /*image initialisieren*/
 gdImagePtr image;
 FILE *png;
 int black, white, red, blue, yelow;

  png = fopen("./bild1.png","rb");
  if(png==NULL) { /*Fehler*/ exit(0); }
  image = gdImageCreateFromPng(png);
  fclose(png);

 /*Speicher für die Farben allozieren*/
 white=gdImageColorAllocate(image,0,0,0);   /*Weiss*/
 black=gdImageColorAllocate(image,255,255,255); /*Schwarz*/
 red  =gdImageColorAllocate(image,255,0,0); /*rot*/
 blue =gdImageColorAllocate(image,0,0,255); /*blau*/
 yelow=gdImageColorAllocate(image,255,255,0); /*gelb*/

 gdImageRectangle(image,25,25,75,75,black);
 gdImageFill(image, 45,45, black);
 gdImageFill(image, 55,55, black);
 gdImageFill(image, 45,55, white);
 gdImageFill(image, 55,45, white);

 png = fopen("bild2.png","wb");

 gdImagePng(image,png);

 fclose(png);

 gdImageDestroy(image);

 return 0;
}

Und so siehts aus :

Bild Nummer 2


Übersetzen sie das ganze wieder wie gewohnt......

gcc -o image image.c -lgd

Weitere Möglichkeiten haben sie mittels......

jpeg=fopen("./image.jpeg", "rb");
image = gdImageCreateFromJpeg(jpeg);
if(image==NULL) { exit(0); }
fclose(jpeg);

...was genauso angewendet werden kann wie das Beispiel eben. Nur ist das Problem das die neuere GD-Bibliothek aus Lizenzgründen keine Gif-Format mehr unterstützt. Benötigen sie dieses Format, so sollten sie sich eine ältere GD-Library herunterladen.

Weiter Möglichkeiten die ebenso wie gdImageCreateFromJpeg funktionieren sind....

gdImageCreateFromXbm(xbm)   //X-Bitmap-Format
gdImageCreateFromWmp(wbmp)  //WBitmap
gdImageCreateFromGd(gd)     //gd-Format
gdImageCreateFromGd2(gd2)   //gd2-Format

Alle erwarten ebenso einen Stream. Vom Format *.gd kann ich abraten, da die Datei nicht komprimiert wird und recht groß werden kann.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf