Note: You can not change the style of a font as in html; if you want an italic font you can not change a standard font to italic.
( I have found you can modify the fonts when using -draw )
You are not restricted to the fonts installed with ImageMagick but can use any True type Font, PostScript font, X11 font and use the path to the font in the code
You can find which fonts are available to you in your standard installation by using the code below. ( NB: that "font" replaced "type" in the latest release due to a name clash for the '-type' options list ).
This code will use the correct method automaticaly depending on the version of ImageMagick installed.
<?php
// Select the version number from the configeration file
preg_match('/^LIB_VERSION_NUMBER ([0-9,]+)$/m', shell_exec("convert -list configure "), $vnums);
// Seperate the numbers at the ,
$number = explode( ",", $vnums[1] );
// Format the version from 6,3,4,1 format to 06030401
$version = "";
for($i=0;$i<4;$i++)
{
$version .= str_pad( $number[$i], 2, '0', STR_PAD_LEFT );
}
// The 'list' method used to get the fonts changed in IM v6.3.5-7
$font_list = ( $version > "06030507" ) ? "font" : "type";
// Display the version of Imagemagick, the method to read the fonts and the list of fonts
echo "<h2>IM version: ".$version." </h2>\n
<h3>Method used: convert -list $font_list</h3>\n
<hr>\n<pre>";
system("convert -list $font_list");
echo "</pre>\n<hr>";
?>
IM version: 06030506 Method used: convert -list type -------------------------------------------------------------------------------- Path: /usr/lib/ImageMagick-6.3.5/config/type-ghostscript.xml Name Family Style Stretch Weight -------------------------------------------------------------------------------- AvantGarde-Book AvantGarde Normal Normal 400 AvantGarde-BookOblique AvantGarde Oblique Normal 400 AvantGarde-Demi AvantGarde Normal Normal 600 AvantGarde-DemiOblique AvantGarde Oblique Normal 600 Bookman-Demi Bookman Normal Normal 600 Bookman-DemiItalic Bookman Italic Normal 600 Bookman-Light Bookman Normal Normal 300 Bookman-LightItalic Bookman Italic Normal 300 Courier Courier Normal Normal 400 Courier-Bold Courier Normal Normal 700 Courier-BoldOblique Courier Oblique Normal 700 Courier-Oblique Courier Oblique Normal 400 fixed Helvetica Normal Normal 400 Helvetica Helvetica Normal Normal 400 Helvetica-Bold Helvetica Normal Normal 700 Helvetica-BoldOblique Helvetica Italic Normal 700 Helvetica-Narrow Helvetica Narrow Normal Condensed 400 Helvetica-Narrow-Bold Helvetica Narrow Normal Condensed 700 Helvetica-Narrow-BoldOblique Helvetica Narrow Oblique Condensed 700 Helvetica-Narrow-Oblique Helvetica Narrow Oblique Condensed 400 Helvetica-Oblique Helvetica Italic Normal 400 NewCenturySchlbk-Bold NewCenturySchlbk Normal Normal 700 NewCenturySchlbk-BoldItalic NewCenturySchlbk Italic Normal 700 NewCenturySchlbk-Italic NewCenturySchlbk Italic Normal 400 NewCenturySchlbk-Roman NewCenturySchlbk Normal Normal 400 Palatino-Bold Palatino Normal Normal 700 Palatino-BoldItalic Palatino Italic Normal 700 Palatino-Italic Palatino Italic Normal 400 Palatino-Roman Palatino Normal Normal 400 Symbol Symbol Normal Normal 400 Times-Bold Times Normal Normal 700 Times-BoldItalic Times Italic Normal 700 Times-Italic Times Italic Normal 400 Times-Roman Times Normal Normal 400 Path: System Fonts Name Family Style Stretch Weight -------------------------------------------------------------------------------- Bitstream-Charter-Bold Bitstream Charter Normal Normal 700 Bitstream-Charter-Bold-Italic Bitstream Charter Italic Normal 700 Bitstream-Charter-Italic Bitstream Charter Italic Normal 400 Bitstream-Charter-Regular Bitstream Charter Normal Normal 400 Century-Schoolbook-Bold Century Schoolbook Normal Normal 700 Century-Schoolbook-Bold-Italic Century Schoolbook Italic Normal 700 Century-Schoolbook-Italic Century Schoolbook Italic Normal 400 Century-Schoolbook-Roman Century Schoolbook Normal Normal 400 Dingbats-Regular Dingbats Normal Normal 400 Nimbus-Mono-Bold Nimbus Mono Normal Normal 700 Nimbus-Mono-Bold-Oblique Nimbus Mono Oblique Normal 700 Nimbus-Mono-Regular Nimbus Mono Normal Normal 400 Nimbus-Mono-Regular-Oblique Nimbus Mono Oblique Normal 400 Nimbus-Roman-No9-Bold Nimbus Roman No9 Normal Normal 700 Nimbus-Roman-No9-Bold-Italic Nimbus Roman No9 Italic Normal 700 Nimbus-Roman-No9-Regular Nimbus Roman No9 Normal Normal 400 Nimbus-Roman-No9-Regular-Italic Nimbus Roman No9 Italic Normal 400 Nimbus-Sans-Bold Nimbus Sans Normal Normal 700 Nimbus-Sans-Bold-Italic Nimbus Sans Italic Normal 700 Nimbus-Sans-Condensed-Bold Nimbus Sans Condensed Normal Normal 700 Nimbus-Sans-Condensed-Bold-Itali Nimbus Sans Condensed Italic Normal 700 Nimbus-Sans-Condensed-Regular Nimbus Sans Condensed Normal Normal 400 Nimbus-Sans-Condensed-Regular-It Nimbus Sans Condensed Italic Normal 400 Nimbus-Sans-Regular Nimbus Sans Normal Normal 400 Nimbus-Sans-Regular-Italic Nimbus Sans Italic Normal 400 Standard-Symbols-Regular Standard Symbols Normal Normal 400 URW-Bookman-Demi-Bold URW Bookman Normal Normal 700 URW-Bookman-Demi-Bold-Italic URW Bookman Italic Normal 700 URW-Bookman-Light URW Bookman Normal Normal 400 URW-Bookman-Light-Italic URW Bookman Italic Normal 400 URW-Chancery-Medium-Italic URW Chancery Italic Normal 500 URW-Gothic-Book URW Gothic Normal Normal 300 URW-Gothic-Book-Oblique URW Gothic Oblique Normal 300 URW-Gothic-Demi URW Gothic Normal Normal 600 URW-Gothic-Demi-Oblique URW Gothic Oblique Normal 600 URW-Palladio-Bold URW Palladio Normal Normal 700 URW-Palladio-Bold-Italic URW Palladio Italic Normal 700 URW-Palladio-Italic URW Palladio Italic Normal 400 URW-Palladio-Roman URW Palladio Normal Normal 400 Utopia-Bold Utopia Normal Normal 700 Utopia-Bold-Italic Utopia Italic Normal 700 Utopia-Italic Utopia Italic Normal 400 Utopia-Regular Utopia Normal Normal 400
There is a blank space for "Dingbats-Regular" which I assume as it will not work for this example it will not work in any code; the same for "Standard-Symbols-Regular" which just displays ????
<?php
// *************************************
// NOTE: Image Magick returns the array in two different formats OR
// it could be a difference between Linux and Windows !
// Format 1 > AvantGarde-Book AvantGarde Normal Normal 400
// Format 2 > family: Arial stretch: Condensed etc.
// I have modified the code to allow for both formats.
// *************************************
// Display the version number - can be uncommented
// system("convert -version");
// Select the version number from the configeration file
preg_match('/^LIB_VERSION_NUMBER ([0-9,]+)$/m', shell_exec("convert -list configure "), $vnums);
// Seperate the numbers at the ,
$number = explode( ",", $vnums[1] );
// Format the version from 6,3,4,1 to 06030401
$version = "";
for( $i=0; $i<4; $i++ )
{ $version .= str_pad( $number[$i], 2, '0', STR_PAD_LEFT ); }
// The 'list' method used to get the fonts changed in IM v6.3.5-7
// so set the method depending on the version number
$font_list = ( $version > "06030507" ) ? "font" : "type";
// Populate the array only - do not display it
exec("convert -list $font_list", $IMarray, $code);
// Sort the array alphabeticly
sort( $IMarray );
// Display the array - can be uncommented
// echo "<pre>"; print_r($IMarray); echo "</pre>";
// Check the array layout - check the value of line 3
if ( $IMarray[2] == NULL ) { $method = "1"; }
else { $method = "2"; }
// Setup some default values
$delete = array();
$image_list = "";
// Depending on the result of the check of line 3 use this method or the next
if ( $method == "1" ) {
// Function to remove items from array
function array_delete( $array, $filterfor ){
$thisarray = array ();
foreach( $array as $value )
if( stristr( $value, $filterfor ) === false && strlen( $value ) > 0 )
$thisarray[] = $value;
return $thisarray;
}
// Array of characters to replace and their replacements
$old_values = array("'","");
$new_values = array("&","and");
// Remove blank lines
$NoBlanks = array_filter( $IMarray );
// Remove items containing Name from the arrary
$NoName = array_delete( $NoBlanks, "Name" );
// Remove items containing Path: from the array
$NoPath = array_delete( $NoName, "Path:" );
// Find the amount of items in the array
$count = count( $NoPath );
// Reduce the count by one as the array starts at 0
$count = $count-1;
/// Start the loop to generate the images
for ( $i=2; $i <= $count; $i++ ) {
// Get the font name from the array
$FirstPart = explode(' ', $NoPath[$i]);
$Font = str_replace( $old_values, $new_values, $FirstPart['0']);
$Image = $Font.".png";
// Create the images
$cmd = "-size 280x16 xc:lightblue -bordercolor white -border 1x1 -font $Font ".
" -pointsize 12 -gravity Center -fill black -annotate +0+0 \"$Font\" ";
system("convert $cmd $Image");
// Generate the list of images for use in the large image
$image_list = $image_list." ".$Image;
// Generate the array of tempory images to delete
$delete[] = $Image;
}
}
else {
foreach ( $IMarray as $key => $value ) {
if ( strpos ( $value, 'Font:')){
$FirstPart = preg_split('/\s+/', $value);
$Font = str_replace( $old_values, $new_values, $FirstPart['2']);
$Image = $Font.".png";
// Create the images
$cmd = "-size 280x16 xc:lightblue -bordercolor white -border 1x1 -font $Font ".
" -pointsize 12 -gravity Center -fill black -annotate +0+0 \"$Font\" ";
system("convert $cmd $Image");
// Generate the list of images for use in the large image
$image_list = $image_list." ".$Image;
// Generate the array of temporary images to delete
$delete[] = $Image;
} }
}
// Create the large image
exec("convert -background white -gravity Center $image_list -append fonts.png");
// Delete the tempory images
foreach ( $delete as $value ) {
unlink( $value ); }
?>