I've developed a well-documented, fairly rock-solid API for creating on the fly, anti-aliased, rounded corner images, including full alpha transparency support for all you PNG lovers.
go here to download the package:
http://sourceforge.net/projects/roundedphp/
go here for a live demo:
http://dev.kingthief.com/demos/roundedphp/
Installation is similar to PEAR.
Enjoy!
Image συναρτήσεις
Εισαγωγή
H PHP δεν περιορίζεται μόνο στη δημιουργία ενός HTML output. Μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία και διαχείρηση αρχείων εικόνας ποικίλων τύπων, συμπεριλαμβανομένων των gif, png, jpg, wbmp, και xpm. Ακόμα πιο βολικό είναι το γεγονός ότι η PHP μπορεί να στείλει stream εικόνων κατευθείαν σε έναν browser. Θα πρέπει να κάνετε compile την PHP με τη βιβλιοθήκη GD, των συναρτήσεων εικόνας, για να λειτουργήσει με αυτόν των τρόπο. Οι GD και PHP μπορεί να χρειαστούν και άλλες βιβλιοθήκες, πράγμα που εξαρτάται από το ποιους τύπους εικόνας έχεται επιλέξει να ασχοληθείτε.
Μπορείτε να χρησιμοποιείσετε αυτές τις συναρτήσεις, στην PHP, για να πάρετε το μέγεθος των JPEG, GIF, PNG, SWF, TIFF και JPEG2000 εικόνων.
Note: Διαβάστε το τμήμα που αναφέρεται στις απαιτήσεις, για πληροφορίες σχετικά με το πώς μπορείτε να αυξήσεται τη δυνατότητα ανάγνωσης, γραφής και τροποποίησης εικόνων, καθώς επίσης και της ανάγνωσης των meta data των εικόνων που λαμβάνονται από ψηφιακές cameras.
Απαιτήσεις
Εάν έχετε τη βιβλιοθήκη GD (διαθέσιμη στο » http://www.libgd.org/) θα είστε, επίσης, σε θέση να δημιουργείσετε και να διαχειριστείτε εικόνες.
Ο τύπος των εικόνων που μπορείτε να διαχειριστείτε, εξαρτάται από την έκδοση της GD που είναι εγκατεστημένη, και από οποιαδήποτε άλλη βιβλιοθήκη μπορεί να χρειστεί η GD για να προσπελάσει τον απαιτούμενο τύπο. Οι παλιότερες της gd-1.6 εκδόσεις της GD, υποστηρίζουν εικόνες τύπου GIF, ενώ δεν υποστηρίζουν τις PNG, ενώ οι εκδόσεις μετά την gd-1.6 υποστηρίζουν τον PNG τύπο, αλλά όχι τον GIF.
Note: Από την έκδοση 4.3 της PHP υπάρχει μαζί με το πακέτο μία έκδοση της βιβλιοθήκης GD. Αυτή έχει κάποια επιπλέον χαρακτηριστικά, όπως το alpha blending και θα πρέπει να χρησιμοποιείται αυτή, κατά προτίμηση, μιας και η codebase της είναι καλύτερα διατηρημένη και πιο σταθερή.
Μπορεί να επιθυμείτε την GD να διαχειρίζεται περισσότερους τύπους εικόνων.
| Τύπος εικόνας | Βιβλιοθήκη που πρέπει να κάνετε download | Σημειώσεις |
|---|---|---|
| gif | Υποστηρίζεται σε εκδόσεις μεγαλύτερες της gd-1.6. Read-only GIF υποστήριξη είναι διαθέσιμη στην έκδοση 4.3.0 της PHP 4.3.0 και τη συνημμένη GD βιβλιοθήκη. | |
| jpeg-6b | » ftp://ftp.uu.net/graphics/jpeg/ | |
| png | » http://www.libpng.org/pub/png/libpng.html | Υποστηρίζεται σε εκδόσεις της GD που είναι μεγαλύτερες της gd-1.6. |
| xpm | » ftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html | Είναι πιθανόν να έχετε ήδη εγκατεστημένη αυτή τη βιβλιοθήκη εάν έχετε ένα X-Environment. |
Μπορεί να επιθυμείτε την GD να χειρίζεται διάφορες γραμματοσειρές. Ακολουθούν οι υποστηριζόμενες βιβλιοθήκες γραμματοσειρών:
| Βιβλιοθήκη γραμματοσειρών | Download | Σημειώσεις |
|---|---|---|
| FreeType 1.x | » http://www.freetype.org/ | |
| FreeType 2 | » http://www.freetype.org/ | |
| T1lib | » ftp://sunsite.unc.edu/pub/Linux/libs/graphics/) | Υποστήρικη για Type 1 fonts. |
Εάν έχεται κάνει compile την PHP με --enable-exif είστε σε θέση να εργαστείτε με τις πληροφορίες που βρίσκονται στα headers των JPEG και TIFF εικόνων. Με αυτόν τον τρόπο μπορεί να γίνει ανάγνωση των meta data, που όπως αναφέρθηκε και ποηγουμένως παράγονται από τις ψηφιακές cameras. Αυτές οι συναρτήσεις δεν απαιτούν τη βιβλιοθήκη GD.
Note: Η PHP δεν απαιτεί κάποια επιπλέον βιβλιοθήκη για το exif module.
Εγκατάσταση
Για να έχετε GD υποστήριξη, πρέπει να κάνετε configure την PHP με την επιλογή --with-gd[=DIR], όπου DIR είναι το όνομα του καταλόγου εγκατάστασης της. Για να χρησιμοποείσετε την προτινόμενη, συνημμένη, έκδοση της GD βιβλιοθήκης (που πρωτοβγήκε με την PHP 4.3.0), χρησιμοποιείστε την επιλογή --with-gd. Στα Windows, θα πρέπει να συμπεριλάβετε το GD2 DLL php_gd2.dll ως extension στο php.ini. Το GD1 DLL php_gd.dll αφαιρέθηκε στην έκδοση 4.3.2 της PHP. Επίσης πρόσεξτε ότι οι προτιμόμενες truecolor image συναρτήσεις, όπως είναι η imagecreatetruecolor(), απαιτούν GD2.
Για να κάνετε disable την GD υποστήριξη στην PHP 3, προσθέστε την επιλογή --without-gd στο configure line σας.
Μπορείτε να αυξήσετε τις δυνατότητες της GD, ώστε να χειρίζεται περισσότερους τύπους εικόνων, με το να καθορίσετε τον configure switch --with-XXXX, στο PHP configure line σας.
| Τύπος εικόνας | Configure Switch |
|---|---|
| jpeg-6b | Για να αποκτήσετε υποστήριξη για τον jpeg-6b, προσθέστε την --with-jpeg-dir=DIR. |
| png | Για να αποκτήσετε υποστήριξη για τον png, προσθέστε την --with-png-dir=DIR. Προσέξτε ότι η libpng απαιτεί την zlib library, για αυτό το λόγο προσθέστε την επιλογή --with-zlib-dir[=DIR] στο configure line σας. |
| xpm | Για να αποκτήσετε υποστήριξη για τον xpm, προσθέστε την --with-xpm-dir=DIR. Εάν η διαχείριση δεν μπορεί να εντοπίσει τις απαιτούμενες βιβλιοθήκες, μπορείτε να προσθέσετε το path για τις X11 βιβλιοθήκες σας. |
Για να επεκτείνετε τις δυνατότητες της GD, ώστε να χειρίζεται διάφορες γραμματοσειρές, προσδιορίστε τον configure switch --with-XXXX, στο PHP onfigure line σας.
| Βιβλιοθήκη γραμματοσειρών | Configure Switch |
|---|---|
| FreeType 1.x | Για να αποκτείσετε υποστήριξη για τη FreeType 1.x, προσθέστε την --with-ttf[=DIR]. |
| FreeType 2 | Για να αποκτείσετε υποστήριξη για τη FreeType 2, προσθέστε την --with-freetype-dir=DIR. |
| T1lib | Για να αποκτείσετε υποστήριξη για τη T1lib (Type 1 fonts), προσθέστε την --with-t1lib[=DIR]. |
| Native TrueType string συνάρτηση | Για να αποκτείσετε υποστήριξη για τη native TrueType string συνάρτηση, προσθέστε την --enable-gd-native-ttf. |
Ρυθμίσεις κατά την εκτέλεση
Η συμπεριφορά αυτών των συναρτήσεων επιρεάζεται από τις ρυθμίσεις στο php.ini.
H exif υποστηρίζει την αυτόματη μετατροπή για Unicode και JIS κωδικοποιήσεις χαρακτήρων των σχολίων του χρήστη, όταν το module mbstring είναι διαθέσιμο. Αυτό γίνεται με την αποκωδικοποίηση, σε πρώτη φάση, του σχολίου χρησιμοποιώντας το καθορισμένο σύνολο χαρακτήρων. Μετά από αυτό, το αποτέλεσμα κωδικοποιείται με ένα άλλο σύνολο χαρακτήρων το οποίο ταιριάζει με το HTTP output.
| Όνομα | Προκαθοριμένη τιμή | Υποκείμενη σε αλλαγή |
|---|---|---|
| exif.encode_unicode | "ISO-8859-15" | PHP_INI_ALL |
| exif.decode_unicode_motorola | "UCS-2BE" | PHP_INI_ALL |
| exif.decode_unicode_intel | "UCS-2LE" | PHP_INI_ALL |
| exif.encode_jis | "" | PHP_INI_ALL |
| exif.decode_jis_motorola | "JIS" | PHP_INI_ALL |
| exif.decode_jis_intel | "JIS" | PHP_INI_ALL |
Ακολουθεί μια μικρή επεξήγηση των directive ρυθμίσεων.
- exif.encode_unicode string
-
Η exif.encode_unicode καθορίζει το σύνολο χαρακτήρων με το οποίο θα διαχειριστούν τα UNICODE σχόλια του χρήστη. Αυτό αντιστοιχεί στο ISO-8859-15, που λειτουργεί κανονικά για τις περισσότερες μη-ασιατικές χώρες. Η ρύθμιση μπορεί να είναι κενή ή να περιέχει μία κωδικοποίηση που να υποστηρίζεται από το mbstring. Εάν είναι κενή, χρησιμοποιείται η τρέχουσα εσωτερική κωδικοποίηση του mbstring.
- exif.decode_unicode_motorola string
-
Η exif.decode_unicode_motorola καθορίζει το εσωτερικό σύνολο χαρακτήρων εικόνας, για σχόλια χρήστη με Unicode κωδικοποίηση, όταν η εικόνα είναι σε motorola byte order (big-endian). Αυτή η ρύθμιση δεν μπορεί να είναι κενή, αλλά μπορείτε να καθορίσετε μία λίστα από κωδικοποιήσεις που θα υποστηρίζονται από το mbstring. Η προκαθορισμένη είναι η UCS-2BE.
- exif.decode_unicode_intel string
-
Η exif.decode_unicode_intel καθορίζει το εσωτερικό σύνολο χαρακτήρων εικόνας, για σχόλια χρήστη με Unicode κωδικοποίηση, όταν η εικόνα είναι σε intel byte order (little-endian). Αυτή η ρύθμιση δεν μπορεί να είναι κενή, αλλά μπορείτε να καθορίσετε μία λίστα από κωδικοποιήσεις που θα υποστηρίζονται από το mbstring. Η προκαθορισμένη είναι η UCS-2BE.
- exif.encode_jis string
-
Η exif.encode_jis καθορίζει το σύνολο χαρακτήρων βάσει του οποίου διαχειρίζονατι τα JIS σχόλια χρήστη. Αυτή καθορίζεται να έχει μία κενή τιμή, η οποία αναγκάζει τις συναρτήσεις να χρησιμοποιούν την τρέχουσα εσωτερική κωδικοποίηση του mbstring.
- exif.decode_jis_motorola string
-
Η exif.decode_jis_motorola καθορίζει το εσωτερικό σύνολο χαρακτήρων εικόνας για σχόλια χρήστη με JIS κωδικοποίηση, όταν η εικόνα είναι σε motorola byte order (big-endian). Αυτή η ρύθμιση δεν μπορεί να είναι κενή, αλλά μπορείτε να καθορίσετε μία λίστα από κωδικοποιήσεις που θα υποστηρίζονται από το mbstring H προκαθορισμένη είναι η JIS.
- exif.decode_jis_intel string
-
Η exif.decode_jis_intel καθορίζει το εσωτερικό σύνολο χαρακτήρων εικόνας για σχόλια χρήστη με Unicode κωδικοποίηση, όταν η εικόνα είναι σε intel byte order (little-endian). Αυτή η ρύθμιση δεν μπορεί να είναι κενή, αλλά μπορείτε να καθορίσετε μία λίστα από κωδικοποιήσεις που θα υποστηρίζονται από το mbstring. H προκαθορισμένη είναι η JIS.
Τύποι Πόρων
Αυτή η επέκταση δεν έχει resource τύπους ορισμένους.
Προκαθορισμένες Σταθερές
Οι σταθερές παρακάτω ορίζονται από αυτή την επέκταση, και θα είναι διαθέσιμες μόνο αν η επέκταση έχει γίνει compile μέσα στην PHP ή έχει φορτωθεί δυναμικά κατά την εκτέλεση.
- IMG_GIF (integer)
- IMG_JPG (integer)
- IMG_JPEG (integer)
- IMG_PNG (integer)
- IMG_WBMP (integer)
- IMG_XPM (integer)
- IMG_COLOR_TILED (integer)
- IMG_COLOR_STYLED (integer)
- IMG_COLOR_BRUSHED (integer)
- IMG_COLOR_STYLEDBRUSHED (integer)
- IMG_COLOR_TRANSPARENT (integer)
- IMG_ARC_ROUNDED (integer)
- IMG_ARC_PIE (integer)
- IMG_ARC_CHORD (integer)
- IMG_ARC_NOFILL (integer)
- IMG_ARC_EDGED (integer)
- IMAGETYPE_GIF (integer)
- IMAGETYPE_JPEG (integer)
- IMAGETYPE_PNG (integer)
- IMAGETYPE_SWF (integer)
- IMAGETYPE_PSD (integer)
- IMAGETYPE_BMP (integer)
- IMAGETYPE_TIFF_II (integer)
- IMAGETYPE_TIFF_MM (integer)
- IMAGETYPE_JPC (integer)
- IMAGETYPE_JP2 (integer)
- IMAGETYPE_JPX (integer)
- IMAGETYPE_SWC (integer)
Παραδείγματα
Example#1 Δημιουργία PNG με την PHP
<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);
?>
Table of Contents
- gd_info — Ανακτείστε πληροφορίες για την εγκατεστημένη GD βιβλιοθήκη
- getimagesize — Ανακτείστε το μέγεθος μίας εικόνας
- image_type_to_extension — Get file extension for image type
- image_type_to_mime_type — Ανακτείστε τον Mime-Type για τον τύπο εικόνας, που επιστρέφεται από τις συναρτήσεις getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
- image2wbmp — Κάνει output ένα αρχείο στον browser ή σε ένα αρχείο
- imagealphablending — Καθορίστε το blending mode μίας εικόνας
- imageantialias — Έλεγχος για το αν πρέπει να χρησιμοποιηθούν antialias συναρτήσεις
- imagearc — Σχεδιάστε μία μερική έλλειψη
- imagechar — Σχεδιάστε έναν χαρακτήρα οριζοντίως
- imagecharup — Σχεδιάστε ένα χαρακτήρα κάθετα
- imagecolorallocate — Διαθέστε ένα χρώμα για μία εικόνα
- imagecolorallocatealpha — Διαθέστε ένα χρώμα για μία εικόνα
- imagecolorat — Ανακτείστε το δείκτη του χρώματος ενός pixel
- imagecolorclosest — Ανακτείστε το δείκτη του πιο κοντινού, στο προσδιορισμένο, χρώματος
- imagecolorclosestalpha — Ανακτείστε το δείκτη του πιο κοντινού, στο προσδιορισμένο, χρώματος + alpha
- imagecolorclosesthwb — Ανακτείστε το δείκτη του χρώματος που έχει την πλησιέστερη, στο δοθέν χρώμα, απόχρωση, λευκότητα, απόχρωση και σκοτεινότητα
- imagecolordeallocate — Αποδεσμεύσtε ένα χρώμα για μία εικόνα
- imagecolorexact — Ανακτείστε το δείκτη ενός χρώματος
- imagecolorexactalpha — Ανακτείστε το δείκτη ενός χρώματος + alpha
- imagecolormatch — Κάνει τα χρώματα της παλέττας μίας εικόνας να πλησιάζουν την true color έκδοση
- imagecolorresolve — Ανακτείστε το δείκτη ενός χρώματος ή τον πιο κοντινό σε αυτό, ως εναλλλακτική επιλογή
- imagecolorresolvealpha — Ανακτείστε το δείκτη ενός χρώματος + alpha ή την πιο κοντινή εναλλακτική του επιλογή
- imagecolorset — Αντιστοιχίστε ένα χρώμα σε ένα δείκτη της παλέττας
- imagecolorsforindex — Ανακτείστε τα χρώματα μέσω ενός δείκτη
- imagecolorstotal — Υπολογίστε το πλήθος χρωμάτων μίας παλέττας εικόνας
- imagecolortransparent — Καθορίστε ένα χρώμα ως διαφανές
- imageconvolution — Apply a 3x3 convolution matrix, using coefficient and offset
- imagecopy — Αντιγράψτε ένα μέρος μίας εικόνας
- imagecopymerge — Αντιγράψτε και συγχωνεύστε ένα μέρος μίας εικόνας
- imagecopymergegray — Αντιγράψτε και συγχωνεύστε ένα μέρος μίας εικόνας σε gray scale
- imagecopyresampled — Αντιγράψτε και κάνετε resize μέρος μίας εικόνας με resampling
- imagecopyresized — Αντιγράψτε και αλλάξτε το μέγεθος μέρους μίας εικόνας
- imagecreate — Δημιουργείστε μία νέα palette based εικόνα
- imagecreatefromgd2 — Δημιουργείστε μία νέα εικόνα από ένα GD2 αρχείο ή ένα URL
- imagecreatefromgd2part — Δημιουργείστε μία νέα εικόνα από ένα δοσμένο μέρος ενός GD2 αρχείου ή ενός URL
- imagecreatefromgd — Δημιουργείστε μία νέα εικόνα από ένα GD αρχείο ή ένα URL
- imagecreatefromgif — Δημιουργείστε μία εικόνα από ένα αρχείο ή ένα URL
- imagecreatefromjpeg — Δημιουργείστε μία νέα εικόνα από ένα αρχείο ή ένα URL
- imagecreatefrompng — Δημιουργείστε μία νέα εικόνα από ένα αρχείο ή ένα URL
- imagecreatefromstring — Δημιουργείστε μία νέα εικόνα από το image stream της string
- imagecreatefromwbmp — Δημιουργία μίας νέας εικόνας από ένα αρχείο ή ένα URL
- imagecreatefromxbm — Δημιουργείστε μία νέα εικόνα από ένα αρχείο ή ένα URL
- imagecreatefromxpm — Δημιουργείστε μία νέα εικόνα από ένα αρχείο ή ένα URL
- imagecreatetruecolor — Δημιουργείστε μία true color εικόνα
- imagedashedline — Σχεδιάστε μία διακεκομμένη γραμμή
- imagedestroy — Καταστρέψτε μία εικόνα
- imageellipse — Σχεδιάστε μία έλλειψη
- imagefill — Flood fill
- imagefilledarc — Σχεδιάστε μία μερική έλλειψη και γεμίστε την
- imagefilledellipse — Σχεδιάστε μία γεμισμένη έλλειψη
- imagefilledpolygon — Σχεδιάστε ένα γεμισμένο πολύγωνο
- imagefilledrectangle — Σχεδιάστε ένα γεμισμένο ορθογώνιο
- imagefilltoborder — Flood fill με ένα συγκεκριμένα χρώμα
- imagefilter — Applies a filter to an image
- imagefontheight — Ανακτείστε το μέγεθος μίας γραμματοσειράς
- imagefontwidth — Ανακτείστε το πλάτος μίας γραμματοσειράς
- imageftbbox — Δώστε το bounding box ενός κειμένου χρησιμοποιώντας γραμματοσειρές μέσω του freetype2
- imagefttext — Γράψτε κείμενο στην εικόνα χρησιμοποιώντας γραμματοσειρά μέσω του FreeType 2
- imagegammacorrect — Εφαρμόστε μία gamma διόρθωση σε μία GD εικόνα
- imagegd2 — Παραγάγετε μία GD2 εικόνα
- imagegd — Στείλε μία GD εικόνα στον browser ή σε ένα αρχείο
- imagegif — Στέλνει μία εικόνα στον browser ή σε ένα αρχείο
- imagegrabscreen — Captures the whole screen
- imagegrabwindow — Captures a window
- imageinterlace — Επιτρέψτε ή όχι το interlace
- imageistruecolor — Ελέγχει εάν μία εικόνα είναι truecolor.
- imagejpeg — Στείλτε μία εικόνα στον browser ή σε ένα αρχείο
- imagelayereffect — Set the alpha blending flag to use the bundled libgd layering effects
- imageline — Χαράξτε μία γραμμή
- imageloadfont — Φορτώστε μία νέα γραμματοσειρά
- imagepalettecopy — Αντιγράψτε την παλέττα μίας εικόνας σε μία άλλη
- imagepng — Στέλνει μία PNG εικόνα είτε στον browser είτε σε ένα αρχείο
- imagepolygon — Σχεδιάστε ένα πολύγωνο
- imagepsbbox — Δώστε το bounding box ενός κειμένου χρησιμοποιώντας PostScript Type1 γραμματοσειρές
- imagepsencodefont — Αλλάξτε το διάνυσμα κωδικοποίησης χαρακτήρων μίας γραμματοσειράς
- imagepsextendfont — Επεκτείνετε ή συρρικνώστε μία γραμματοσειρά
- imagepsfreefont — Ελευθερώστε μνήμη που χρησιμοπιείται από μία PostScript Type 1 γραμματοσειρά
- imagepsloadfont — Φορτώνει μία PostScript Type 1 γραμματοσειρά από ένα αρχείο
- imagepsslantfont — Δώστε κλίση στα στοιχεία μίας γραμματοσειράς
- imagepstext — Σχεδιάστε ένα text string πάνω σε μία εικόνα με χρήση PostScript Type1 γραμματοσειράς
- imagerectangle — Σχεδιάστε ένα τετράγωνο
- imagerotate — Περιστρέψτε μία εικόνα κάτα μία δοθείσα γωνία
- imagesavealpha — Θέστε το flag για να αποθηκεύσετε όλες τις alpha channel πληροφορίες (καθώς αντιτίθενται σε μονοχρωματική διαφάνεια) όταν σώζετε PNG εικόνες.
- imagesetbrush — Θέστε την brush εικόνα για σχεδίαση γραμμών
- imagesetpixel — Θέστε ένα μόνο pixel
- imagesetstyle — Καθορίστε τι στυλ σχεδίασης γραμμών
- imagesetthickness — Προσδιορίστε το πάχος για τη σχεδίαση γραμμών
- imagesettile — Καθορίστε την tile εικόνα που θα χρησιμοποιηθεί για γέμισμα
- imagestring — Σχεδιάστε ένα string οριζοντίως
- imagestringup — Σχεδιάστε ένα string καθέτως
- imagesx — Ανακτήστε το πλάτος της εικόνας
- imagesy — Ανακτήστε το ύψος μίας εικόνας
- imagetruecolortopalette — Μετατρέψτε μία true color εικόνα σε μία palette εικόνα
- imagettfbbox — Δώστε το bounding box ενός κειμένου χρησιμοποιώντας TrueType γραμματοσειρά
- imagettftext — Γράψτε κείμενο στην εικόνα χρησιμοποιώτας TrueType γραμματοσειρά
- imagetypes — Επιστρέφει τους τύπους εικόνας που υποστηρίζονται από την εγκατεστημένη PHP
- imagewbmp — Στείλτε την εικόνα στον browser ή σε ένα αρχείο
- imagexbm — Output XBM image to browser or file
- iptcembed — Ενθέστε binary IPTC δεδομένα σε μία JPEG εικόνα
- iptcparse — Κάνετε parse ένα binary IPTC http://www.iptc.org/ block κατά single tags.
- jpeg2wbmp — Μετατρέψτε ένα αρχείο τύπου JPEG σε WBMP
- png2wbmp — Μετατρέψτε ένα PNG αρχείο εικόνας σε ένα WBMP
Image
28-Mar-2008 09:20
17-Mar-2008 05:39
To troy,
Good demo of GD "tricks"
If safe mode is not: on;
then it will be better to:
instead of using putenv()
using the following which will work in any php.ini settings environment.
$fontpath='../../../WINDOWS/fonts/';
$font =$fontpath. 'arial.ttf';
14-Mar-2008 03:09
Here is a fun example Easter Egg drawing that uses a bunch of image functions. Just in time for Easter 2008. Enjoy.
<?php
$image = imagecreatetruecolor(400, 500);
$bg = imagecolorallocate($image, 10, 10, 150);
imagefill($image, 0, 0, $bg);
// allocate some colors
$white = imagecolorallocate($image, 255, 255, 255);
$grey = imagecolorallocate($image, 128, 128, 128);
$black = imagecolorallocate($image, 0, 0, 0);
// choose a color for the elipse
$col_ellipse = imagecolorallocate($image, 255, 200, 255);
// draw ellipse shadow
imagefilledellipse($image, 215, 265, 320, 400, $black);
// draw the ellipse
imagefilledellipse($image, 200, 250, 320, 400, $col_ellipse);
//draw arc where plastic egg opens
imagearc($image, 198, 235, 326, 100, 0, 180, $bg);
$colour = imagecolorallocate($image, 100, 0, 200);
$ca = rand(2,5);
$cb = rand(2,5);
$cc = rand(2,5);
$cd = rand(2,5);
${"colour".$ca} = imagecolorallocate($image, 153, 204, 255);
${"colour".$cb} = imagecolorallocate($image, 102, 0, 153);
${"colour".$cc} = imagecolorallocate($image, 204, 153, 204);
${"colour".$cd} = imagecolorallocate($image, 153, 0, 255);
//positions of stars relative to original position
$shift['x'][]=0; //star 1
$shift['y'][]=0;
$star['color'][] = $colour;
$shift['x'][]=-80; //star 2
$shift['y'][]=-120;
$star['color'][] = $colour2;
$shift['x'][]=-130; //star 3
$shift['y'][]=10;
$star['color'][] = $colour3;
$shift['x'][]=-10; //star 4
$shift['y'][]=-250;
$star['color'][] = $colour4;
$shift['x'][]=-160; //star 5
$shift['y'][]=-200;
$star['color'][] = $colour5;
for($ii=0; $ii < count($shift['x']); $ii++)
{
// set up array of points for polygon
$values = array(
230, 330,
290, 390,
280, 340,
240, 380,
310, 370,
230, 330
);
$shiftX = $shift['x'][$ii];
$shiftY = $shift['y'][$ii];
foreach ($values as &$val)
{
if($i == 1){ $val = $val+$shiftY; $i++; }
else
{ $val = $val+$shiftX; $i = 1; }
}
// draw a star filled in with a circle
imagefilledpolygon($image, $values, 6, $star['color'][$ii]);
imagefilledellipse($image, 273+$shiftX, 364+$shiftY, 35, 24, $star['color'][$ii]);
}//end for
// Rotate
$degrees = rand(0,360);
$image= imagerotate($image, $degrees, 0);
imagefilter($image, IMG_FILTER_MEAN_REMOVAL, 0);
imagefilter($image, IMG_FILTER_SMOOTH, 0);
//add some text
$text = 'Easter Egg by Troy Jordan 2008 using only php & gd';
//place font in same path as this script
putenv('GDFONTPATH=' . realpath('.'));
//change this font to the name of your font
$font = 'ACAKZIDE.TTF';
// Add some shadow to the text
imagettftext($image, 18, 0, 13, 21, $grey, $font, $text);
// Add the text
imagettftext($image, 18, 0, 12, 20, $white, $font, $text);
//resize the image
$width = imagesx($image);
$height = imagesy($image);
if($height > 0) { $ratio = $width/$height; }
$rand = rand(25,75);
$perc = $rand/100;
$newwidth = $width * $perc;
$newheight = $height * $perc;
$image2 = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($image2, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
header("Content-type: image/png");
imagepng($image2);
?>
11-Mar-2008 09:34
This is regarding a note below titled "sampathperera at hotmail dot com - Sri Lanka". It is incomplete. A much better version is at (concat lines below to construct URL):
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?
txtCodeId=739&lngWId=8
If the link is broken, google for Image Verification Tutorial by Darryl Porter.
23-Dec-2007 03:19
<?php
/**
HSL/RGB conversion functions
very useful for a lot of applications
**/
function RBGtoHSL ( $R, $G, $B )
{
$var_R = ( $R / 255 );
$var_G = ( $G / 255 );
$var_B = ( $B / 255 );
$var_Min = min( $var_R, $var_G, $var_B )
$var_Max = max( $var_R, $var_G, $var_B )
$del_Max = $var_Max - $var_Min
$L = ( $var_Max + $var_Min ) / 2;
if ( $del_Max == 0 )
{
$H = 0
$S = 0
}
else
{
if ( $L < 0.5 )
{
$S = $del_Max / ( $var_Max + $var_Min );
}
else
{
$S = $del_Max / ( 2 - $var_Max - $var_Min );
}
$del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
if ( $var_R == $var_Max )
{
$H = $del_B - $del_G;
}
else if ( $var_G == $var_Max )
{
$H = ( 1 / 3 ) + $del_R - $del_B;
}
else if ( $var_B == $var_Max )
{
$H = ( 2 / 3 ) + $del_G - $del_R;
}
if ( $H < 0 )
{
$H += 1;
}
if ( $H > 1 )
{
$H -= 1
}
}
return array( $H, $S, $L );
}
function HuetoRGB( $v1, $v2, $vH )
{
if ( $vH < 0 )
{
$vH += 1;
}
if ( $vH > 1 )
{
$vH -= 1;
}
if ( ( 6 * $vH ) < 1 )
{
return ( $v1 + ( $v2 - $v1 ) * 6 * $vH );
}
if ( ( 2 * $vH ) < 1 )
{
return ( $v2 );
}
if ( ( 3 * $vH ) < 2 )
{
return ( $v1 + ( $v2 - $v1 ) * ( ( 2 / 3 ) - $vH ) * 6 );
}
return ( $v1 )
}
function HSLtoRGB ( $H, $S, $L )
{
if ( $S == 0 )
{
$R = $L * 255;
$G = $L * 255;
$B = $L * 255;
}
else
{
if ( $L < 0.5 )
{
$var_2 = $L * ( 1 + $S );
}
else
{
$var_2 = ( $L + $S ) - ( $S * $L );
}
$var_1 = 2 * $L - $var_2;
$R = 255 * HuetoRGB( $var_1, $var_2, $H + ( 1 / 3 ) );
$G = 255 * HuetoRGB( $var_1, $var_2, $H );
$B = 255 * HuetoRGB( $var_1, $var_2, $H - ( 1 / 3 ) );
}
return array( $R, $G, $B );
}
function distance ( $R1, $G1, $B1, $R2, $G2, $B2 )
{
$result = sqrt ( ( $R1 - $R2 )*( $R1 - $R2 ) + ( $G1 - $G2 )*( $G1 - $G2 ) + ( $B1 - $B2 )*( $B1 - $B2 ) );
return ( $result );
}
?>
14-Nov-2007 03:51
I have noticed that some functions use quite complicated resizing code, however if you want to specify just one dimension (e.g. resizing an image for a catalogue or social network etc) then you can do it my just getting the percentage reduction of one dimension of the image and applying it to the other, like so:
<?php
$new_width = 150;
//assuming you have already used imageSX(), imageSY() to get the dimensions.
$percentage_reduction = ($new_width / $old_width) * 100;
$new_height = ($old_height / 100) * $percentage_reduction;
?>
This means that images will not be stretched, but will be neater as they are the same width (e.g. facebook).
20-Oct-2007 08:10
Here is an Example of what can be done using GD and Php.
There is a whole 3D-Dungeon realized and rendered in Real-Time using GD:
http://www.quizzen.de/labyrinth/
29-Aug-2007 11:44
In reply to diggertadmin at gmail dot com:
I had the effect that my thumbnail script exceeded the memory limit, too.
However, as error_reporting was turned off, Firefox just printed out the script URL.
Internet Explorer was more helpful here.
22-Apr-2007 12:28
If you are getting the generic error "The image cannot be displayed, because it contains errors.", comment out header("Content-type: image/png");. This will enable PHP to display the real PHP errors.
26-Mar-2007 10:41
Jonathon Reinhart, don't assume it.
.SO and .A files are libraries for dynamic and stactic linking when you compile a program. just to install <package> isn't enought to compile against it's libraries, as them may be only run-time libraries and give you some headache. The correct is to install <package>-devel, which will give you the right libraries for compile time.
And one final word... linux is by now a stable system with lots of working done... if the thing you're trying to do is too hard or unexplained it means that either you're trying something noone ever cared about spending his time on it or you didn't readed how to do it properly. Either way try to learn more about what you're trying.
12-Mar-2007 11:48
I've seen a lot of issues with getting PHP compiled with jpeg and png support. I built it under SuSE 10.2 and ./configure kept giving me "libjpeg.(a|so) not found". I believe that's because my libjpeg was libjpeg.so.62. It also did this for libpng (which mine was named libpng12.so)
Apparently ./config is looking only for the .so files. To resolve this, I installed libjpeg-devel and libpng-devel, which then created symlinks: libpng.so -> libpng12.so and libjpeg.so -> libjpeg.so.62.0.0 . I'm assuming creating these symlinks without installing the -devel packages will work just fine.
02-Mar-2007 11:38
A lot of GD effects in functions, like:
greyscale, sepia, filling, better-merging, fading
can be found here:
Examples Page:
http://beta.sn4g.net/gd.fillAndMerge.php
Source: http://url.sn4g.net/1u
They all work on PHP 4 and 5. Functions well documented, just copy and use it.
Others Proof of Concepts at http://beta.sn4g.net/
19-Aug-2006 03:04
In addition to %0A which you can use for making multiline text images, you can also use underlining and strikethrough.
For underlining use %0D and _, for example:
/image.php?text=Underline.%0D________
For strikethrough use %0D and %E2%80%93, for example:
/image.php?text=Strikethrough.%0D%E2%80%93%E2%80%93%E2%80%93%E2%80%93
%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93
If you want to use both of them in one line you will have to use %20 to dispose the next block of modifying symbols:
/image.php?text=Underline%20and%20Strikethrough.%0D_______%20%20%20%20
%20%20%20%20%20%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93
%E2%80%93%E2%80%93%E2%80%93%E2%80%93
As you see all modifying symbols for whole line are put after %0D in one string after the whole modifyable text and not after each modifyable word. This makes easy to put on and take off modifying string for whole line when it`s necessary.
If the text is on several lines, each line has its own disposition of modifying symbols:
/image.php?text=Underline%20and%0D_______%0AStrikethrough.%0D%E2%80%93
%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93%E2%80%93
%E2%80%93%E2%80%93
Theese are only some examples how to use symbol combining. Using %0D and other symbols from Windows Charmap you can easy make images of characters which even doesn`t exist in any font.
18-Aug-2006 04:43
If you want to make an image through GET with text in several lines, use %0A for line separating, for example:
/image.php?text=Text%20string%0Ain%20several%0Alines.
As also you can make php generated images without other knowing that they are php-made. Simply add the image extension in Apache httpd.conf file:
AddType application/x-httpd-php .php .png
And call image as normal png image:
/somephpautogeneratedimage.png
Of course real .png files will be now treated as php, but if you don`t have png files on your webserver, this won`t be a problem. Or you can use this code for displaying real png images through php code:
<?php
$filename = 'realpngfile.png';
header('Content-type: image/png');
header('Content-length: '.filesize($filename));
readfile($filename);
?>
17-Aug-2006 04:01
I wrote this script to fetch details about a GIF image. I wanted to use it for avatar details on a CMS system, so I wrote it to return an array of details (instead of having to go through all of the functions)
Without further ado, here the script is:
<?
/*
* Get GIF image data
* Returns an array of data, including GIF image type, and
* the width and height of the image, plus transparent colour
* details and much more.
*
* Copyright 2006 Thomas Oldbury.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*/
/*
* This function takes one argument, $file, a direct link to the image in
* question. Perhaps in future versions it will get the file from an image
* resource, but for now, it will have to do.
*/
function fetch_gif_data($file) {
/*
* First, we need to get the contents of the file in question, or we print
* a warning using trigger_error().
*/
$file_data = @file_get_contents($file) or trigger_error("File $file does not exist", E_USER_WARNING);
/*
* Now we need to fetch the gif image's version. We'll use strpos to fetch
* gif89a, gif87a or if we don't get that then we will print an error.
*/
$image_type = strpos($file_data, "g");
/*
* Now we check to see wether it is actually a GIF image, as it may not be
* an image and if this is the case, problems could occur.
*/
if($image_type === false) {
trigger_error("File $file is not a gif89a or gif87a compatible image", E_USER_ERROR);
}
/*
* Now, we need to fetch the image type by fetching the text at a certain
* position, using PHP's function substr.
*/
$image_info[version] = substr($file_data, 0, 6);
$image_info[file_reg_version] = substr($file_data, 3, 3);
/*
* Let's get the total number of colours in this image using a special
* piece of code, which fetches all the image's colours.
*/
$im_gif = imagecreatefromgif($file);
$image_info[total_pallete_colours] = imagecolorstotal($im_gif);
/*
* Now, the next thing we need to do is get the width and height of the
* image in question by using imagesx(); and imagesy();
*/
$image_info[width] = imagesx($im_gif);
$image_info[height] = imagesy($im_gif);
/*
* Let's fetch the transparent color of the image, if there is one.
*/
$id = imagecolortransparent($im_gif);
$image_info[transparent_color_id] = $id;
$image_info[transparent_color_values] = imagecolorsforindex($im_gif, $id);
/*
* Now, we return all the data.
*/
return $image_info;
}
/*
* Usage Example:
*/
echo '<pre>';
print_r(fetch_gif_data("hello.gif"));
echo '</pre>';
?>
This script returns something like:
Array
(
[version] => GIF89a
[file_reg_version] => 89a
[total_pallete_colours] => 251
[width] => 100
[height] => 100
[transparent_color_id] => 16
[transparent_color_values] => Array
(
[red] => 0
[green] => 0
[blue] => 0
[alpha] => 127
)
)
Tested on PHP 5.1.2, but should work on older versions.
20-Jul-2006 10:04
I have used following function to generate Security Images to authenticate users are real humans. Need to have GD graphic library with FreeType enabled.
Used a gif file as background, put random text on it & creates a new gif file as output.
<?php
function createImage(){
// creates the images, writes the file
$fileRand = md5(rand(100000,999999));
$string_a = array("A","B","C","D","E","F","G","H","J","K",
"L","M","N","P","R","S","T","U","V","W","X","Y","Z",
"2","3","4","5","6","7","8","9");
$keys = array_rand($string_a, 6);
foreach($keys as $n=>$v){
$string .= $string_a[$v];
}
$backgroundimage = "security_background.gif";
$im=imagecreatefromgif($backgroundimage);
$colour = imagecolorallocate($im, rand(