Image erzeugen und einlesen
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:
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.
/* 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:
Übersetzen sie das ganze wieder wie gewohnt:
TTY
you@host > gcc -o image image.c -lgd
you@host >
Weitere Möglichkeiten haben sie mittels:
jpeg=fopen("./image.jpeg", "rb");
image = gdImageCreateFromJpeg(jpeg);
if(image==NULL) { exit(0); }
fclose(jpeg);
Obriges kann genauso angewendet werden wie das Beispiel davor. 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.
Anmerkung von Martin Conrad: Inzwischen ist die Unterstützung von gif Formaten auch wieder in neueren Versionen implementiert.
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.
Weiter mit Dateien ausgeben und sichern
