<?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 ); }
?>