>> Inhaltsverzeichnis >> Anleitung für Entwickler

Grafiken und Fotos

Wie lade ich eine Grafik aus einer Datei?

<?php 
$image = new Image('dateiname');
// zum Beispiel:
$image = new Image('ordner/datei.png');
?>

Wie lade ich eine Grafik aus einem String?

<?php 
$content file_get_contents('ordner/datei.png');
$image = new Image($content'png');
?>

Wie erzeuge ich eine neue (leere) Grafik?

<?php 
$image = new Image();
$width 640;
$height 480;
$image->resize($width$height);
?>

Wie erzeuge ich ein Thumbnail?

<?php 
$image = new Image('ordner/datei.png');
$width 50;
// wenn die Höhe ($height) nicht angegeben wird,
// dann wird die Grafik proportional verkleinert
$image->resize($width);
$image->outputToFile('ordner/thumbnail.png');
?>

 Wie erstelle ich ein Upload-Formular für Bilder?

HTML-Code:
<form method="POST" action="%PHP_SELF%" enctype="multipart/form-data">
 (...)
Upload image: <input type="file" name="my_image" />
 (...)
</form>
PHP-Code:
<?php 
// get data from form field 'my_image'
$id 'my_image';
// output to directory 'foo/bar/' using filename 'image'
// (extension will be determined automatically)
$file 'foo/bar/image';
// output as png image
$type 'png';
// limit upload to 150 kbyte
$size 150000;
// resize to 150px x 200px
$width 150;
$height 200;
// leave aspect-ratio untouched
$ratio true;
// set background color to gray
$color = array(808080);

// call method
$result Image::uploadFile($id$file$type$size$width$height$ratio$color);

// check for errors
if (is_string($result)) {

    print "The image was successfully uploaded to '$result'";

// error handling
} else {

    switch ($result)
    {
        case UPLOAD_ERR_SIZE:
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            die('File too big!');
        break;

        case UPLOAD_ERR_NO_FILE:
            die('No file has been uploaded!');
        break;

        case UPLOAD_ERR_INVALID_TARGET:
            die("Unable to write to file: '$file'");
        break;

        case UPLOAD_ERR_FILE_TYPE:
            die('The file is not a recognized image!');
        break;

        default:
            die('Some unexpected error occured!');
        break;
    }

}
?>

Wie zeichne ich Linien, geometrische Flächen und Text?

<?php 
// erzeuge leeres Bild
$image = new Image();
$width 180;
$height 120;
$image->resize($width$height);

// setze die Linienbreite auf 3px (optional)
$image->setLineWidth(3);

// die Leinwand mit einer Hintergrundfarbe füllen
$x 0;
$y 0;
$image->fill($image->white$x$y);

// Zeichne eine Linie
$x1 10;
$y1 10;
$x2 100;
$y2 30;
$image->drawLine($x1$y1$x2$y2$image->black);

// Zeichne einen Kreis
$x 30;
$y 50;
$width 50;
$image->drawEllipse($x$y$width);

// Zeichne ein Rechteck
$x 10;
$y 60;
$width 100;
$height 50;
$rahmenFarbe $image->black;
$fuellFarbe $image->navy;
$image->drawRectangle($y$y$width$height$rahmenFarbe$fuellFarbe);

// Zeichne ein Dreieck (oder anderes Polygon)
$points = array(
=> array( 20),
=> array( 4020 ),
=> array( 020 )
);
$x 50;
$y 80;
$rahmenFarbe $image->black;
$fuellFarbe $image->yellow;
$image->drawPolygon($points$x$y$rahmenFarbe $fuellFarbe);

// Schreibe einen Text
$text 'Hallo Welt!';
$x 70;
$y 40;
$textFarbe$image->black;
$image->drawString($text$x$y$textFarbe);

// Verwenden von Pinseln

// neuen Pinsel erzeugen
$brush = new Brush('small star');
// setze Größe des Pinsels auf 10px
$brush->setSize(10);
// setze die Farbe des Pinsels auf rot
$brush->setColor(25500);
// den Pinsel auswählen
$image->setBrush($brush);

// zeichne einen Punkt und benutze dabei den Pinsel
$x 150;
$y 100;
$image->drawPoint($x$yIMG_COLOR_BRUSHED);

// Ausgabe der Grafik an den Browser
$image->outputToScreen('png');
exit;
?>

Abbildung
Abbildung: Ausgabe des Skripts

Details zur Verwendung von Farben

Wenn Sie mit Grafiken arbeiten, dann brauchen Sie Farben, um Linien, Texte oder Flächen zu zeichnen.

Es gibt 17 vordefinierte Farben. Diese lauten:

  1. $image->aqua
  2. $image->black
  3. $image->blue
  4. $image->fuchsia
  5. $image->gray
  6. $image->green
  7. $image->grey (Alias von $image->gray)
  8. $image->lime
  9. $image->maroon
  10. $image->navy
  11. $image->olive
  12. $image->purple
  13. $image->red
  14. $image->silver
  15. $image->teal
  16. $image->white
  17. $image->yellow

Weitere Farben können Sie erhalten durch Aufruf von: $color = $image->getColor($rot, $gruen, $blau); Dabei dürfen $rot, $gruen und $blau ganze Zahlen zwischen 0 und 255 sein.

Es ist wichtig, dass Sie verstehen, dass eine Farbe kein Objekt ist, dass für sich selbst existiert, sondern eine spezifische Eigenschaft einer Grafik. Das kommt daher, dass jede Grafik eine eigene Farbpalette besitzt und jede Farbe ein Teil (mathematisch gesprochen ein "Element") dieser Palette ist.

Die Palette des Bildes ist eine indexierte Menge aller in der Grafik enthaltenen Farben. Eine Farbe wird dabei dargestellt als ganze Zahl. Genauer: es handelt sich um Indexnummer der Farbe innerhalb der Farbpalette des Bildes. Das heißt, die Zahl 1 bezeichnet beispielsweise die Farbe, welche in der Farbpalette der Grafik die Positionsnummer 1 hat. Diese Farbe könnte am Bildschirm zum Beispiel "rot" aussehen. Beachten Sie jedoch, dass diese Zuordnung abhängig ist von der Farbpalette und somit vom gerade angezeigten Bild.

Welche Grafikfilter und -effekte kann ich verwenden?

Hier eine Liste interessanter Methoden der Klasse Image und was diese bewirken:

<?php 
$image = new Image('foo.png');

/* Helligkeit einstellen
 *
 * Zahl zwischen -1.0 und +1.0 (-100% und +100%)
 */
$ammount 0.5/* 0.5 = +50% */
$image->brightness($ammount);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Kontrast einstellen
 *
 * Zahl zwischen -1.0 und +1.0 (-100% und +100%)
 */
$ammount 0.5/* 0.5 = +50% */
$image->contrast($ammount);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Unscharfmaske anwenden 
 *
 * Zahl zwischen 0.0 und +1.0 (0% und +100%)
 */
$ammount 0.8/* 0.8 = 80% */
$image->blur($ammount);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Bildschärfe erhöhen
 *
 * Zahl zwischen 0.0 und +1.0 (0% und +100%)
 */
$ammount 0.8/* 0.8 = 80% */
$image->sharpen($ammount);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* in Graustufen umwandeln
 */
$image->toGrayscale();
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Einfärben (Kolorieren)
 *
 * $rot, $gruen, $blau = Zahlen zwischen -255 und 255
 *
 * Der Farbwert wird zur Farbe der Grafik addiert
 */
$rot = -80;
$gruen = -40;
$blau 120;
$image->colorize($rot$gruen$blau);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Multiplizieren
 *
 * $rot, $gruen, $blau = Zahlen zwischen 0 und 255
 *
 * Der Farbwert wird mit der Farbe der Grafik multipliziert
 */
$rot 100;
$gruen 255;
$blau 50;
/* dieses Beispiel reduziert den Rot- und Blaukanal */
$image->multiply($rot$gruen$blau);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Monochromatischer Filter
 *
 * $rot, $gruen, $blau = Zahlen zwischen 0 und 255
 *
 * Färbt die Grafik mit der angegeben Farbe ein.
 */
$rot 130;
$gruen 180;
$blau 200;
$image->monochromatic($rot$gruen$blau);
?>

Abbildung
Abbildung: Ausgabe des Skripts

<?php 
/* Farbwerte umkehren (Negativeffekt)
 */
$image->negate();
?>

Abbildung
Abbildung: Ausgabe des Skripts

Details und Beispiele zu weiteren Funktionen finden Sie in der API-Dokumentation.

Autor: Thomas Meyer, www.yanaframework.net