AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi [PHP] Bilder mit PHP erstellen
Tutorial durchsuchen
Ansicht
Themen-Optionen

[PHP] Bilder mit PHP erstellen

Ein Tutorial von titus · begonnen am 21. Okt 2004 · letzter Beitrag vom 22. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von titus
titus
Registriert seit: 5. Apr 2004
Hi, in diesem Tutorial von mir (schon etwas älter), seht ihr wie man mit PHP dynamische Bilder erstellen kann.

Fangen wir mit einem einfachen Rechteck an (Erklärung im Code mit PHP-Kommentaren):

Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen
$width = 500; # Später die Breite des Rechtecks
$height = 200; # Später die Höhe des Rechtecks
$img = ImageCreate($width, $height); # Hier wird das Bild einer Variable zu gewiesen
$black = ImageColorAllocate($img, 0, 0, 0); # Hier wird der Variable $black die Farbe schwarz zugewiesen
# Die drei nullen bestehen aus den RGB-Parametern. 255, 0, 0 wäre z.B. rot. ($img muss am Anfang stehen)
ImageFill($img, 0, 0, $black); # Hier wird mit ImageFill() das Bild gefüllt an den Koordinaten 0 und 0 mit der Variable $black, also Schwarz
ImagePNG($img); # Hier wird das Bild PNG zugewiesen
?>
Ich denke, hierfür brauche ich kein Bild zu zeigen, da es nur eine schwarze Fläche 500x200px ist.
-------------------------------------------------------------------------------------------------

Nun beschriften wir das Rechteck (z.B. für eine dynamische Signatur):
Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen

##################################################
$width = 100; // Später die Breite des Rechtecks
$height = 50; // Später die Höhe des Rechtecks
$img = ImageCreate($width, $height); # Hier wird das Bild einer Variable zu gewiesen
##################################################


##################################################
$black = ImageColorAllocate($img, 0, 0, 0); # Hier wird der Variable $black die Farbe schwarz zugewiesen
$white = ImageColorAllocate($img, 255, 255, 255); # Hier wird der Variable $white die Farbe weiß zugewiesen
# Die drei nullen bestehen aus den RGB-Parametern. 255, 0, 0 wäre z.B. rot. ($img muss am Anfang stehen)
##################################################


##################################################
ImageFill($img, 0, 0, $black); # Hier wird mit ImageFill() das Bild gefüllt an den Koordinaten 0 und 0 mit der Variable $black, also Schwarz
ImageString($img, 2, 26, 20, "Der Text", $white);
# Die 2 steht für die GD-Lib interne Schriftart (es gibt insgesamt 5, also probierts aus).
# Die 225 steht für die Position von Links, also 26px von Links entfernt.
# Die 100 steht für die Postion von Oben, also 20px von oben entfernt.
# Der Text, ist der, der später im Bild erscheinen soll.
# $white steht für die Farbe die der Text haben soll.
###################################################

ImagePNG($img); # Hier wird das Bild PNG zugewiesen
ImageDestroy($img) # Hier wird der Speicherplatz für andere Sachen geereinigt
?>
Hierfür brauche ich wohl auch kein Bild
----------------------------------------------------------------------

So nun kann man das Bild im Bild noch mal mit anderen Farben einfüllen.
Ich hab mal eine Deutschlandfahne gemacht
So hier ist der Code dafür:

Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen

##################################################
$width = 300; # Später die Breite des Rechtecks
$height = 300; # Später die Höhe des Rechtecks
$img = ImageCreate($width, $height); # Hier wird das Bild einer Variable zu gewiesen
##################################################

##################################################
$black = ImageColorAllocate($img, 0, 0, 0); # Hier wird die Farbe schwarz einer Variable zugewiesen
$red = ImageColorAllocate($img, 255, 0, 0); # Hier wird die Farbe rot einer Variable zugewiesen
$yellow = ImageColorAllocate($img, 255, 255, 0); # Hier wird die Farbe gelb einer Variable zugewiesen
##################################################


##################################################
ImageFill($img, 0, 0, $yellow); # Erst wird das Bild mit gelb gefüllt.
ImageFilledRectangle($img, 0, 0, 300, 100, $black); # Mit ImageFillRectangle wird ein weiter Bereich des Bildes mit schwarz gefüllt
# Die 1. 0 ist die Entfernung in px von Links.
# Die 2. 0 ist die Entfernung in px von Oben.
# Die 300 ist die Breite der Farbe.
# Die 100 ist die Höhe der Farbe.
ImageFilledRectangle($img, 0, 101, 300, 200, $red);
# Hier die gleichen Sachen wie bei der Schwarzfüllung, nur mit anderen Koordinaten und anderer Farbe.

##################################################
ImagePNG($img);
ImageDestroy($img) # Hier wird der Speicherplatz für andere Sachen geereinigt
?>
So siehts dann aus:
http://llcooldanny.s3.cybton.com/danny/de.gif
----------------------------------------------------------------------

So jetzt kommen wir zu Kreisen, Ellipsen und Linien:

Kreise, Halbkreise, Ellipsen:
Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen

##################################################
$width = 100; // Später die Breite des Rechtecks
$height = 100; // Später die Höhe des Rechtecks
$img = ImageCreate($width, $height); # Hier wird das Bild einer Variable zu gewiesen
##################################################

##################################################
$red = ImageColorAllocate($img, 255, 0, 0); # Hier wird der Variable $red die Farbe rot zugewiesen
$white = ImageColorAllocate($img, 255, 255, 255); # Hier wird der Variable $white die Farbe weiß zugewiesen
##################################################
ImageFill($img, 0, 0, $white); # Erst wird das Bild mit weiß gefüllt.

ImageArc($img, 50, 50, 90, 20, 1, 180, $red); # Jetzt wird ein Kreis gezogen
# Der erste Parameter 50 steht für die Entfernung in px von rechts
# Der zweite Parameter 50 steht für die Entfernung in px von oben
# Der dritte Parameter 90 steht für die Größe des Kreises (oder der Ellipse) in der Breite
# Der vierte Parameter 20 steht für die Größe des Kreises (oder der Ellipse) in der Höhe
# Der fünfte Parameter 1 steht für den Startwinkel
# Der sechste Parameter 180 steht für den Endwinkel des Kreises (bzw. der Ellipse)
######################################################

ImagePNG($img); # Hier wird das Bild PNG zugewiesen
ImageDestroy($img) # Hier wird der Speicherplatz für andere Sachen geereinigt
?>
Linien, Gestrichtelte Linien:

Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen

##################################################
$width = 250; # Später die Breite des Rechtecks
$height = 250; # Später die Höhe des Rechtecks
$img = ImageCreate($width, $height); # Hier wird das Bild einer Variable zu gewiesen
##################################################

##################################################
$white = ImageColorAllocate($img, 255, 255, 255); # Hier wird die Farbe weiß einer Variable zugewiesen
$black = ImageColorAllocate($img, 0, 0, 0); # Hier wird die Farbe schwarz einer Variable zugewiesen
##################################################

ImageFill ($img, 0, 0, $white); # Das Bild wird mit weiß gefüllt.

ImageLine($img, 1, 125, 250, 125, $black); # Mit ImageLine wir eine Linie gezeichnet
#
# Die 1 steht für den Abstand in px von links
# Die 1. 125 steht für den Abstand in px von Oben vom linken Punkt der Strecke
# Die 250 steht für den Abstand in px von rechts
# Die 2. 125 steht für den Abstand in px von Oben vom rechten Punkt der Strecke
#
# !!! WICHTIG: Für geschtrichelte Lininen einfach den Befehl 'ImageDashedLine()' benutzen
# Die Parameter sind gleich wie bei 'ImageLine' !!!
#
#
##################################################

##################################################
ImagePNG($img); # Hier wird das Bild PNG zugewiesen
ImageDestroy($img) # Hier wird der Speicherplatz für andere Sachen geereinigt
?>
----------------------------------------------------------------------

Jetzt kommen wir zu einem sehr interessanten Teil vom Tutorial:

Mit existierenden Bildern z.B. eine dynamische Signatur bilden:

Code:
<?php
Header("Content-Type: image/png");
# Hier wird der Header gesendet, der später die Bilder "rendert" ausser png kann auch jpeg dastehen

##################################################
$width = 100; // Später die Breite des Rechtecks
$height = 100; // Später die Höhe des Rechtecks
$img = ImageCreateFromJPEG('g.jpg'); # Hier wird das Bild einer von einem Vorhandenen Bild benutzt (hier: g.jpg)
#
# Seit Version 1.6 der GD-Library ist .gif abgeschaltet also:
#
#---------------------------------------------------
# Zuhause von der GD-Lib: [url]http://www.boutell.com/gd/[/url]
#---------------------------------------------------
#
# Wenn ihr die GD-Library 2.0 habt immer .jpg oder .png aber kein .gif benutzen!
#
# So kann man GD-Library einstellen:
#
# 1. Öffnet im Windows-Ordner die php.ini z.B. C:\Windows\php.ini
#
# 2. Jetzt sucht (STR+F) nach ';Windows Extensions' (ohne den Hochkommata)
#
# 3. Dann schreibt 'extension=php_gd2.dll' unter 'extension=php_gd.dll'
#
# 4. Jetzt macht ein; vor 'extension=php_gd.dll'. Also aus 'extension=php_gd.dll' mach ';extension=php_gd.dll'
#
# 5. Oder wenn ihr GD-Lib 1.X wollt, dann macht es umgekehrt
##################################################

$black = ImageColorAllocate($img, 0, 0, 0); # Farbe schwarz mit $black festlegen

$font_height = ImageFontHeight(3); # Hier wird die Schrifthöhe mit 3 belegt (hier könnt ihr mit den Werten rumprobieren)

$font_width = ImageFontWidth(3); # Hier wird die Schriftbreite mit 3 belegt (hier könnt ihr mit den Werten rumprobieren)

$image_height = ImageSY($img); # Hier wird in einer Variable die Höhe des Bildes (hier g.jpg) gespeichert

$image_width = ImageSX($img); # Hier wird in einer Variable die Breite des Bildes (hier g.jpg) gespeichert

$text = 'Mein Name ist LLCoolDannY!'; # Hier ist der Text, der später im Bild stehen soll

$length = $font_width*strlen($text); # Hier wird die Schriftbreite an das Bild angepasst

# Hier kriegt man durch Teilungen die Mitte des Bildes heraus #

$image_center_x = ($image_width/2)-($length/2);
$image_center_y = ($image_height/2)-($font_height/2);

###############################################################

ImageString($img, 3, $image_center_x, $image_center_y, $text, $black);
/**
* Die 3 nach der Variable $img steht für die GD-Lib interne Schriftart diese geht von 1-5 (also ausprobieren)
*
* --------------------------------------------------------------------------------------------------------------------------------
* Mit $image_center_x und $image_center_y wurde die Mitte herausgefunden und nun angewandt. (Dort können auch eigene Zahlen stehen)
* Beispiel:
*
* ImageString($img, 3, 200, 150, 'Das ist ein Testtext', $black);
*
* Hier ist der String (Zeichenkette, also der Text) 200px von oben und 150px von links vom Bildrand entfernt
*
* --------------------------------------------------------------------------------------------------------------------------------
*
*/

ImagePNG($img); # Hier wird das Bild PNG zugewiesen
ImageDestroy($img) # Hier wird der Speicherplatz für andere Sachen geereinigt
?>
Das Ergebnis könnte dann so aussehen (P.S. das ist mein Alter Nick gewesen ):
Vorher:
http://llcooldanny.s3.cybton.com/danny/g.jpg

Nachher:
http://llcooldanny.s3.cybton.com/danny/g_end.png


----------------------------------------------------------------
So ich denke, alle hauptsächlichen Funktionen sind drin.

Mamphil empfehlt: Man sollte wegen der besseren Qualität nur noch imagecopyresampled statt imagecopyresized nehmen!


mfG, titus

Zusatz:
Hier sind alle (mir Bekannten) Verweise zu Image*()-Funktionen:
-----------------------------------------------------------
imagechar
imagecharup
imagecolorallocate
imagecolorat
imagecolorclosest
imagecolorexact
imagecolorresolve
imagecolorset
imagecolorsforindex
imagecolorstotal
imagecolortransparent
imagecopyresized
imagecreate
imagecreatefromgif
imagedashedline
imagedestroy

imagefill
imagefilledpolygon
imagefilledrectangle
imagefilltoborder
imagefontheight
imagefontwidth
imagegif
imageinterlace
imageline
imageloadfont
imagepolygon
imagepsbbox
imagepsencodefont
imagepsfreefont
imagepsloadfont
imagepstext
imagerectangle
imagesetpixel
imagestring
imagestringup
imagesx
imagesy
imagettfbbox
imagettftext
imagecreatetruecolor
imagecopyresampled
'-'
 
tommie-lie
 
#2
  Alt 21. Okt 2004, 15:58
Ist das das richtige für ein Delphi-Forum?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins
 
#3
  Alt 21. Okt 2004, 16:05
Meiner Meinung nach hast du zwei sehr wichtige Funktionen vergessen, die z.B. für einen Thumbnailgenerator unentbehlich sind.
Als da wären:

imagecreatetruecolor
Create a new true color image

und

imagecopyresampled
imagecopyresampled() copies a rectangular portion of one image to another image, smoothly interpolating pixel values so that, in particular, reducing the size of an image still retains a great deal of clarity.
  Mit Zitat antworten Zitat
Benutzerbild von titus
titus
 
#4
  Alt 21. Okt 2004, 16:43
Stimmt ist ein älteres Tut da hab ich diese Funktionen nicht gebraucht und auch nicht davon gewusst .
Werds mal in die Linkliste adden.

@tommie-lie: Im Chat wurde mir gesagt, ich könne hier auch PHP-Tutorials posten.
Daniel L.
  Mit Zitat antworten Zitat
tommie-lie
 
#5
  Alt 21. Okt 2004, 16:48
Zitat von titus:
@tommie-lie: Im Chat wurde mir gesagt, ich könne hier auch PHP-Tutorials posten.
Nujo, da die DP nichtmal eine PHP-Sparte hat, sondern PHP-Fragen nur im OffTopic geduldet werden, finde ich, passt ein Tutorial nicht wirklich in die Tutorial-Sparte.
  Mit Zitat antworten Zitat
Benutzerbild von Mamphil
Mamphil

 
Delphi 7 Professional
 
#6
  Alt 21. Okt 2004, 16:57
Hi!

Dann solltest du aber bitte auch nicht vergessen zu erwähnen, dass man wegen der besseren Qualität nur noch imagecopyresampled statt imagecopyresized nehmen sollte...

Mamphil
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#7
  Alt 21. Okt 2004, 17:04
Jetzt muss ich auch mal was sagen.

In der Beschreibung dieser Sparte steht:
Zitat:
Hier gibt es die Möglichkeit, dass Benutzer, die sich in einem Gebiet (oder mehreren Gebieten) besonders gut auskennen, ihr Wissen detailliert mit den andern teilen.
Dort steht nur, dass es Tutorials sind, explizit Delphi steht nicht dran, deshalb finde ich schon, dass es die richtige Sparte ist. Es hat zwar nichts mit Delphi zu tun, aber mit Programmieren.
  Mit Zitat antworten Zitat
tommie-lie
 
#8
  Alt 21. Okt 2004, 17:08
Zitat von Matze:
Dort steht nur, dass es Tutorials sind, explizit Delphi steht nicht dran
Na wenn dem so ist, gitl das natürlich nicht, was ich gesagt habe.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#9
  Alt 22. Okt 2004, 10:43
Zitat von tommie-lie:
Na wenn dem so ist, gitl das natürlich nicht, was ich gesagt habe.
Klar ist es ein Delphi-Forum und in "Multimedia" z.B. steht auch nicht dran, dass es um Delphi geht, aber bei den Tutorials bin ich mir nicht ganz sicher, muss ich ehrlich zugeben.
  Mit Zitat antworten Zitat
tommie-lie
 
#10
  Alt 22. Okt 2004, 11:12
Zitat von Matze:
aber bei den Tutorials bin ich mir nicht ganz sicher, muss ich ehrlich zugeben.
Na wenn dem so ist, gilt natürlich, was ich gesagt habe

Aber Daniel hätte sich sicherlich schon gemeldet, wenn er das Tutorial nicht in der DP haben wollte, also nehme ich mal an, daß es in Ordnung so ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz