Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 18 Images
  gp 18.1 Image_Barcode
  gp 18.2 Image_Text
  gp 18.3 Image_GIS
  gp 18.4 Image_Color
  gp 18.5 Image_Graph
    gp 18.5.1 Farben
    gp 18.5.2 Linien
    gp 18.5.3 Füllungen
    gp 18.5.4 Schriftarten
    gp 18.5.5 Die Achsen
    gp 18.5.6 Gitternetz
    gp 18.5.7 Diagrammtypen


Rheinwerk Computing

18.2 Image_Text  toptop


Besprochene Version: 1.0.2 Lizenz: PHP-Lizenz 2.02
Klassendatei(en): Image/Text.php

Das Paket Image_Text stellt eine einfache Möglichkeit zur Ausgabe von Texten in Grafiken bereit. Zwar können Sie auch direkt mit PHP Texte ausgeben; wenn Sie aber beispielsweise schon einmal mit dem Problem konfrontiert waren, dass Sie einen Text um seinen Mittelpunkt drehen mussten, dann wissen Sie, welchen Aufwand das bedeuten kann. Angenehm ist, dass die Klasse die Bilddateien komplett selbst erstellen oder alternativ auch auf ein fertiges Bild zurückgreifen kann.

Das Aussehen der Bilddatei, die generiert werden soll, kann recht umfangreich beeinflusst werden. Die einzelnen Werte werden hierbei mit einem Array übergeben, wie Sie in Listing 18.3 sehen können.

require_once 'Image/Text.php'; 
 
function check_err($obj) 
{ 
 if (PEAR::isError($obj)) 
 { 
    die ($obj->getMessage()); 
 } 
} 
$options = array( 
    'cx'            => 200, 
    'cy'            => 200, 
    'canvas'        => array( 
                        'width' => 400, 
                        'height'=> 400 
                       ), 
    'width'         => 300, 
    'height'        => 300, 
    'color'         => '#ffffff', 
    'max_lines'     => 100, 
    'min_font_size' => 5, 
    'max_font_size' => 100, 
    'font_path'     => './', 
    'antialias'     => true, 
    'font_file'     => 'arial.ttf', 
    'halign'        => IMAGE_TEXT_ALIGN_CENTER, 
    'valign'        => IMAGE_TEXT_ALIGN_MIDDLE 
); 
 
// Neues Objekt erstellen 
$img_text = new Image_Text("Hallo Welt",$options); 
check_err($img_text); 
 
// Objekt initialisieren 
$erg=$img_text->init(); 
check_err($erg); 
 
// Ideale Textgroesse ermitteln lassen 
$erg=$img_text->autoMeasurize(); 
check_err($erg); 
 
// Grafik berechnen 
$erg=$img_text->render(); 
check_err($erg); 
// Daten an Browser senden 
$erg=$img_text->display(); 
check_err($erg);

Listing 18.3 Ausgabe eines Textes mit PEAR::Text_Image

Die Ausgabe von Listing 18.3 finden Sie in Abbildung 18.2.

Abbildung 18.2 Ausgabe im Browser

Der Konstruktor dieser Klasse bekommt den Text übergeben, der in der Grafik ausgegeben werden soll. Idealerweise sollten Sie ihm auch schon das Array mit den Optionen übergeben, das das Erscheinungsbild des Textes definiert. Alternativ können die Optionen auch später mithilfe der Methode set() übergeben werden, was auch hilfreich sein kann, wenn Sie bestehende Optionen überschreiben wollen, weil ein Objekt zum Generieren von mehreren Grafiken genutzt werden soll. Möchten Sie nachträglich die genutzten Farben ändern, stehen die Methoden setColor() und setColors() zur Verfügung. Die erstere bekommt nur einen Farbwert übergeben, wohingegen die zweite ein Array mit Farbwerten akzeptiert.

Die Methode init() muss aufgerufen werden, um das Objekt korrekt zu initialisieren. Nachdem das erfolgt ist, kann der Text durch die Methode render() ausgegeben werden. Diese benötigt allerdings die Information, in welcher Schriftgröße der Text dargestellt werden soll. Da diese Information in diesem Beispiel nicht mit dem Options-Array übergeben wurde, wird zuvor die Methode autoMeasurize() aufgerufen. Sie berechnet, welche Schriftgröße maximal genutzt werden kann. Die Methode kann recht ressourcenintensiv sein, weswegen Sie sie mit Bedacht nutzen sollten. Um den Rechenaufwand zu reduzieren, können Sie ihr zwei Zahlen als Parameter übergeben, mit denen Sie festlegen, in welchem Bereich die Schriftgröße liegen soll. Die erste Zahl beschreibt hierbei die kleinste und die zweite Zahl die größte Schrift.

Die Methode bestimmt aber nicht nur die Schriftgröße. Sie passt den Text auch in das Textfeld ein. Sie bestimmt also, wo umbrochen werden muss und Ähnliches. Geben Sie eine Schriftgröße vor, so muss dieser Schritt immer noch erfolgen. Bei gegebener Schriftgröße ist dafür allerdings die Methode measurize() vorgesehen.

Nachdem diese Schritte durchlaufen sind, können Sie das fertige Bild mit der Methode display() zum Browser schicken. Soll das Bild in einer Datei abgelegt werden, können Sie der Methode den booleschen Wert true übergeben, der definiert, dass das Bild als Datei gespeichert werden soll. Der Name und Pfad wird hierbei auch über die Optionen festgelegt. Da es ein wenig missverständlich sein könnte, mit einer Methode namens display() eine Datei zu speichern, können Sie auch die Methode save() nutzen. Sie bekommt den Dateinamen als Parameter übergeben. Andernfalls übernimmt sie den Dateinamen aus den Optionen.

Vielleicht fragen Sie sich, warum ich in Listing 18.3 recht intensiv auf Fehler getestet habe. Da bei der Verarbeitung von Bildern schnell mal ein Fehler auftaucht, kann es nicht schaden, jeden Schritt zu testen. Des Weiteren sollten Sie dabei bitte nicht vergessen, dass eine Fehlermeldung nicht zu sehen ist, wenn Sie die Ausgabe des Scripts mit dem <img>-Tag aus HTML eingebunden haben.

Nachdem Sie nun einen Überblick über die Methoden haben, stellt sich natürlich die Frage, welche Optionen an den Konstruktor übergeben werden können. Die Array-Schlüssel mit den entsprechenden Erläuterungen finden Sie in Tabelle 18.1. Die Ausgabe des Textes erfolgt in ein Textfenster, das sich auf einem Bild befindet, das Canvas (Leinwand) genannt wird.


Tabelle 18.1 Aufbau des Options-Arrays
Schlüssel Auswirkung
x und y Mit den Schlüsseln x und y können Sie die Position der linken oberen Ecke des Textfensters festlegen. Die Angabe ist relativ zur linken oberen Ecke des Canvas.
cx und cy Die Schlüssel cx und cy definieren den Mittelpunkt der Textbox und überschreiben die Werte von x und y, wenn sie gleichzeitig angegeben werden.
canvas Definiert den Canvas. Übergeben Sie einen Resource-Identifier eines bestehenden Bildes, wird dieses genutzt. Übergeben Sie ein Array mit den Schlüsseln width und height, wird ein neues Bild in dieser Größe angelegt.
antialias Die Werte true oder false legen fest, ob das Antialiasing für die Ausgabe des Textes eingeschaltet wird.
width und height Diese Schlüssel bekommen die Breite und Höhe des Textfensters übergeben.
halign Definiert die horizontale Ausrichtung. Zulässig sind die Konstanten IMAGE_TEXT_ALIGN_LEFT (Default), IMAGE_TEXT_ALIGN_RIGHT und IMAGE_TEXT_ALIGN_CENTER.
valign Legt die vertikale Ausrichtung in der Textbox fest, wobei die Konstanten IMAGE_TEXT_ALIGN_TOP (Default), IMAGE_TEXT_ALIGN_MIDDLE und IMAGE_TEXT_ALIGN_BOTTOM zulässig sind.
angle Winkel, um den die Textbox gedreht werden soll. Die Drehrichtung ist hierbei entgegen dem Uhrzeigersinn.
color Übergeben Sie eine Farbe, wird diese für den Text genutzt. Mehrere Farben, die in einem Array übergeben werden, werden bei der Ausgabe zyklisch durchlaufen (zeilen- oder absatzweise).
color_mode Die Werte line und paragraph sind zulässig und bestimmen, ob der Farbwechsel zeilen- oder absatzweise erfolgen soll.
font_path Der Pfad zur Schriftdatei. Er muss mit einem Slash (/) enden.
font_file Dateiname der Schriftdatei, die genutzt werden soll.
font_size Schriftgröße, die genutzt werden soll. Nutzen Sie autoMeasure(), wird diese Angabe überschrieben.
line_spacing Definiert den Zeilenabstand in Punkt. Der Default-Wert ist 0.5.
max_lines Der hier übergebene Wert definiert, auf wie viele Zeilen der Text maximal verteilt werden soll. Dieser Wert muss angegeben werden, da das Paket sonst von 0 Zeilen ausgeht.
min_font_size und max_font_size Diese Schlüssel definieren, wie klein die Schrift minimal bzw. maximal werden darf, wenn Sie autoMeasurize() nutzen.
image_type Ausgabetyp des Bildes. Zulässig sind die Konstanten IMAGETYPE_PNG (Default), IMAGETYPE_JPEG und IMAGETYPE_BMP, wobei diese von der installierten GD-Bibliothek unterstützt werden müssen.
dest_file Name, unter dem das Bild abgespeichert werden soll.

In Listing 18.4 sehen Sie noch ein Beispiel dafür, wie das Paket genutzt werden kann, um eine bestehende Grafik, in diesem Fall einen Button, zu beschriften. In dem Beispiel wurden die Fehlerabfragen entfernt, um den Code etwas kompakter zu gestalten.

require_once 'Image/Text.php'; 
 
// Groesse des Bildes auslesen 
$img_daten=getimagesize('bt.jpg'); 
 
// Mittelpunkt berechnen 
$cx=$img_daten[0]/2; 
$cy=$img_daten[1]/2; 
 
// Breite und Hoehe des Textfensters 
$width=$img_daten[0]-20; 
$height=$img_daten[1]-20; 
 
// Bild als Hintergrund einlesen 
$img_bt=imagecreatefromjpeg('bt.jpg'); 
 
$options = array( 
    'cx'            => $cx, 
    'cy'            => $cy, 
    'canvas'        => $img_bt, 
    'width'         => $width, 
    'height'        => $height, 
    'max_lines'     => 1, 
    'color'         => '#dddddd', 
    'min_font_size' => 1, 
    'max_font_size' => 30, 
    'font_path'     => './', 
    'antialias'     => true, 
    'font_file'     => 'arial.ttf', 
    'halign'        => IMAGE_TEXT_ALIGN_CENTER, 
    'valign'        => IMAGE_TEXT_ALIGN_MIDDLE 
); 
 
$img_text = new Image_Text($_GET['text'],$options); 
$img_text->init(); 
$img_text->autoMeasurize(); 
$img_text->render(); 
$img_text->display();

Listing 18.4 Beschriften eines Buttons mithilfe von PEAR::Image_Text

Um den Button entsprechend nutzen zu können, kann er mit einem Tag wie

<img src="button.php?text=Home" />

eingebunden werden. In Abbildung 18.3 sehen Sie den Button einmal in seiner ursprünglichen Variante und einmal mit Beschriftung.

Abbildung 18.3 Button mit und ohne Beschriftung

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de