useful recursive PHP functions

recursively ...

PHP Manual for

XLI. Image Functions

Introduction

PHP is not limited to creating just HTML output. It can also be used to create and manipulate image files in a variety of different image formats, including gif, png, jpg, wbmp, and xpm. Even more convenient, PHP can output image streams directly to a browser. You will need to compile PHP with the GD library of image functions for this to work. GD and PHP may also require other libraries, depending on which image formats you want to work with.

You can use the image functions in PHP to get the size of JPEG, GIF, PNG, SWF, TIFF and JPEG2000 images.

Note: Read requirements section about how to expand image capabilities to read, write and modify images and to read meta data of pictures taken by digital cameras.

Requirements

If you have the GD library (available at http://www.boutell.com/gd/) you will also be able to create and manipulate images.

The format of images you are able to manipulate depend on the version of GD you install, and any other libraries GD might need to access those image formats. Versions of GD older than gd-1.6 support GIF format images, and do not support PNG, where versions greater than gd-1.6 support PNG, not GIF.

Note: Since PHP 4.3 there is a bundled version of the GD lib. This bundled version has some additional features like alpha blending, and should be used in preference to the external library since its codebase is better maintained and more stable.

You may wish to enhance GD to handle more image formats.

Table 1. Supported image formats

Image formatLibrary to downloadNotesgif  Only supported in GD versions older than gd-1.6. Read-only GIF support is available with PHP 4.3.0 and the bundled GD-library. jpeg-6b ftp://ftp.uu.net/graphics/jpeg/ png http://www.libpng.org/pub/png/libpng.html Only supported in GD versions greater than gd-1.6. xpm ftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html It's likely you have this library already available, if your system has an installed X-Environment.

You may wish to enhance GD to deal with different fonts. The following font libraries are supported:

Table 2. Supported font libraries

Font libraryDownloadNotesFreeType 1.x http://www.freetype.org/ FreeType 2 http://www.freetype.org/ T1lib ftp://sunsite.unc.edu/pub/Linux/libs/graphics/) Support for Type 1 fonts.

If you have PHP compiled with --enable-exif you are able to work with information stored in headers of JPEG and TIFF images. This way you can read meta data generated by digital cameras as mentioned above. These functions does not require the GD library.

Note: PHP does not require any additional library for the exif module.

Installation

To enable GD-support configure PHP --with-gd[=DIR], where DIR is the GD base install directory. To use the recommended bundled version of the GD library (which was first bundled in PHP 4.3.0), use the configure option --with-gd. In Windows, you'll include the GD2 DLL php_gd2.dll as an extension in php.ini. The GD1 DLL php_gd.dll was removed in PHP 4.3.2. Also note that the preferred truecolor image functions, such as imagecreatetruecolor(), require GD2.

To enable exif support in Windows, php_mbstring.dll must be loaded prior to php_exif.dll in php.ini.

To disable GD support in PHP 3 add --without-gd to your configure line.

Enhance the capabilities of GD to handle more image formats by specifying the --with-XXXX configure switch to your PHP configure line.

Table 3. Supported image formats

Image FormatConfigure Switchjpeg-6b To enable support for jpeg-6b add --with-jpeg-dir=DIR. png To enable support for png add --with-png-dir=DIR. Note, libpng requires the zlib library, therefore add --with-zlib-dir[=DIR] to your configure line. xpm To enable support for xpm add --with-xpm-dir=DIR. If configure is not able to find the required libraries, you may add the path to your X11 libraries.

Enhance the capabilities of GD to deal with different fonts by specifying the --with-XXXX configure switch to your PHP configure line.

Table 4. Supported font libraries

Font libraryConfigure SwitchFreeType 1.x To enable support for FreeType 1.x add --with-ttf[=DIR]. FreeType 2 To enable support for FreeType 2 add --with-freetype-dir=DIR. T1lib To enable support for T1lib (Type 1 fonts) add --with-t1lib[=DIR]. Native TrueType string function To enable support for native TrueType string function add --enable-gd-native-ttf.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Exif supports automatically conversion for Unicode and JIS character encodings of user comments when module mbstring is available. This is done by first decoding the comment using the specified characterset. The result is then encoded with another characterset which should match your HTTP output.

Table 5. Exif configuration options

NameDefaultChangeableexif.encode_unicode"ISO-8859-15"PHP_INI_ALLexif.decode_unicode_motorola"UCS-2BE"PHP_INI_ALLexif.decode_unicode_intel"UCS-2LE"PHP_INI_ALLexif.encode_jis""PHP_INI_ALLexif.decode_jis_motorola"JIS"PHP_INI_ALLexif.decode_jis_intel"JIS"PHP_INI_ALL
For further details and definition of the PHP_INI_* constants see ini_set().

Here's a short explanation of the configuration directives.

exif.encode_unicode string

exif.encode_unicode defines the characterset UNICODE user comments are handled. This defaults to ISO-8859-15 which should work for most non Asian countries. The setting can be empty or must be an encoding supported by mbstring. If it is empty the current internal encoding of mbstring is used.

exif.decode_unicode_motorola string

exif.decode_unicode_motorola defines the image internal characterset for Unicode encoded user comments if image is in motorola byte order (big-endian). This setting cannot be empty but you can specify a list of encodings supported by mbstring. The default is UCS-2BE.

exif.decode_unicode_intel string

exif.decode_unicode_intel defines the image internal characterset for Unicode encoded user comments if image is in intel byte order (little-endian). This setting cannot be empty but you can specify a list of encodings supported by mbstring. The default is UCS-2LE.

exif.encode_jis string

exif.encode_jis defines the characterset JIS user comments are handled. This defaults to an empty value which forces the functions to use the current internal encoding of mbstring.

exif.decode_jis_motorola string

exif.decode_jis_motorola defines the image internal characterset for JIS encoded user comments if image is in motorola byte order (big-endian). This setting cannot be empty but you can specify a list of encodings supported by mbstring. The default is JIS.

exif.decode_jis_intel string

exif.decode_jis_intel defines the image internal characterset for JIS encoded user comments if image is in intel byte order (little-endian). This setting cannot be empty but you can specify a list of encodings supported by mbstring. The default is JIS.

Resource Types

This extension has no resource types defined.

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

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_WBMP ( integer)

IMAGETYPE_XBM ( integer)

IMAGETYPE_TIFF_II ( integer)

IMAGETYPE_TIFF_MM ( integer)

IMAGETYPE_IFF ( integer)

IMAGETYPE_JB2 ( integer)

IMAGETYPE_JPC ( integer)

IMAGETYPE_JP2 ( integer)

IMAGETYPE_JPX ( integer)

IMAGETYPE_SWC ( integer)

Examples

Example 1. PNG creation with 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);
?>
This example would be called from a page with a tag like: <img src="button.php?text=text">. The above button.php script then takes this "text" string and overlays it on top of a base image which in this case is "images/button1.png" and outputs the resulting image. This is a very convenient way to avoid having to draw new button images every time you want to change the text of a button. With this method they are dynamically generated.

Table of Contents exif_imagetype -- Determine the type of an imageexif_read_data -- Reads the EXIF headers from JPEG or TIFF. This way you can read meta data generated by digital cameras.exif_thumbnail -- Retrieve the embedded thumbnail of a TIFF or JPEG imagegd_info -- Retrieve information about the currently installed GD librarygetimagesize -- Get the size of an imageimage_type_to_mime_type -- Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeimage2wbmp -- Output image to browser or fileimagealphablending -- Set the blending mode for an imageimageantialias --  Should antialias functions be used or not imagearc -- Draw a partial ellipseimagechar -- Draw a character horizontallyimagecharup -- Draw a character verticallyimagecolorallocate -- Allocate a color for an imageimagecolorallocatealpha -- Allocate a color for an imageimagecolorat -- Get the index of the color of a pixelimagecolorclosest -- Get the index of the closest color to the specified colorimagecolorclosestalpha -- Get the index of the closest color to the specified color + alphaimagecolorclosesthwb --  Get the index of the color which has the hue, white and blackness nearest to the given colorimagecolordeallocate -- De-allocate a color for an imageimagecolorexact -- Get the index of the specified colorimagecolorexactalpha -- Get the index of the specified color + alphaimagecolormatch --  Makes the colors of the palette version of an image more closely match the true color version imagecolorresolve --  Get the index of the specified color or its closest possible alternative imagecolorresolvealpha --  Get the index of the specified color + alpha or its closest possible alternative imagecolorset -- Set the color for the specified palette indeximagecolorsforindex -- Get the colors for an indeximagecolorstotal -- Find out the number of colors in an image's paletteimagecolortransparent -- Define a color as transparentimagecopy -- Copy part of an imageimagecopymerge -- Copy and merge part of an imageimagecopymergegray -- Copy and merge part of an image with gray scaleimagecopyresampled -- Copy and resize part of an image with resamplingimagecopyresized -- Copy and resize part of an imageimagecreate -- Create a new palette based imageimagecreatefromgd2 -- Create a new image from GD2 file or URLimagecreatefromgd2part -- Create a new image from a given part of GD2 file or URLimagecreatefromgd -- Create a new image from GD file or URLimagecreatefromgif -- Create a new image from file or URLimagecreatefromjpeg -- Create a new image from file or URLimagecreatefrompng -- Create a new image from file or URLimagecreatefromstring -- Create a new image from the image stream in the stringimagecreatefromwbmp -- Create a new image from file or URLimagecreatefromxbm -- Create a new image from file or URLimagecreatefromxpm -- Create a new image from file or URLimagecreatetruecolor -- Create a new true color imageimagedashedline -- Draw a dashed lineimagedestroy -- Destroy an imageimageellipse -- Draw an ellipseimagefill -- Flood fillimagefilledarc -- Draw a partial ellipse and fill itimagefilledellipse -- Draw a filled ellipseimagefilledpolygon -- Draw a filled polygonimagefilledrectangle -- Draw a filled rectangleimagefilltoborder -- Flood fill to specific colorimagefontheight -- Get font heightimagefontwidth -- Get font widthimageftbbox -- Give the bounding box of a text using fonts via freetype2imagefttext -- Write text to the image using fonts using FreeType 2imagegammacorrect -- Apply a gamma correction to a GD imageimagegd2 -- Output GD2 imageimagegd -- Output GD image to browser or fileimagegif -- Output image to browser or fileimageinterlace -- Enable or disable interlaceimageistruecolor -- Finds whether an image is a truecolor image.imagejpeg -- Output image to browser or fileimagelayereffect --  Set the alpha blending flag to use the bundled libgd layering effectsimageline -- Draw a lineimageloadfont -- Load a new fontimagepalettecopy -- Copy the palette from one image to anotherimagepng -- Output a PNG image to either the browser or a fileimagepolygon -- Draw a polygonimagepsbbox --  Give the bounding box of a text rectangle using PostScript Type1 fontsimagepscopyfont --  Make a copy of an already loaded font for further modificationimagepsencodefont -- Change the character encoding vector of a fontimagepsextendfont -- Extend or condense a fontimagepsfreefont -- Free memory used by a PostScript Type 1 fontimagepsloadfont -- Load a PostScript Type 1 font from fileimagepsslantfont -- Slant a fontimagepstext -- To draw a text string over an image using PostScript Type1 fontsimagerectangle -- Draw a rectangleimagerotate -- Rotate an image with a given angleimagesavealpha --  Set the flag to save full alpha channel information (as opposed to single-color transparency) when saving PNG images. imagesetbrush -- Set the brush image for line drawingimagesetpixel -- Set a single pixelimagesetstyle -- Set the style for line drawingimagesetthickness -- Set the thickness for line drawingimagesettile -- Set the tile image for fillingimagestring -- Draw a string horizontallyimagestringup -- Draw a string verticallyimagesx -- Get image widthimagesy -- Get image heightimagetruecolortopalette -- Convert a true color image to a palette imageimagettfbbox -- Give the bounding box of a text using TrueType fontsimagettftext -- Write text to the image using TrueType fontsimagetypes -- Return the image types supported by this PHP buildimagewbmp -- Output image to browser or fileiptcembed -- Embed binary IPTC data into a JPEG imageiptcparse --  Parse a binary IPTC http://www.iptc.org/ block into single tags.jpeg2wbmp -- Convert JPEG image file to WBMP image filepng2wbmp -- Convert PNG image file to WBMP image fileread_exif_data -- Alias of exif_read_data()

© 2010 lixlpixel