related to the following bug reports:
https://bugs.php.net/bug.php?id=52756
https://bugs.php.net/bug.php?id=49815
https://bugs.php.net/bug.php?id=49600
View a running version of the script here:
related to the following bug reports:
https://bugs.php.net/bug.php?id=52756
https://bugs.php.net/bug.php?id=49815
https://bugs.php.net/bug.php?id=49600
View a running version of the script here:
| <? phpinfo(INFO_GENERAL | INFO_MODULES); ?> |
| <?php | |
| define('SAMPLE', @$_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'] : 'abc'); | |
| define('SAMPLE_TTF', 'georgiai.ttf'); | |
| define('SAMPLE_SIZE', 100); | |
| define('SAMPLE_PAD', 50); | |
| $m = imagettfbbox(SAMPLE_SIZE, 0, SAMPLE_TTF, SAMPLE); | |
| $width = $m[4]-$m[6] + 2*SAMPLE_PAD; | |
| $height = $m[1]-$m[7] + 2*SAMPLE_PAD; | |
| $baseline = abs($m[7]); | |
| $img = imagecreatetruecolor($width,$height); | |
| $red = imagecolorallocate($img,255,0,0); | |
| $white = imagecolorallocate($img,255,255,255); | |
| imagettftext( | |
| $img, | |
| SAMPLE_SIZE, # size | |
| 0, # angle | |
| SAMPLE_PAD, # x | |
| SAMPLE_PAD+$baseline, # y | |
| $white, | |
| SAMPLE_TTF, | |
| SAMPLE | |
| ); | |
| imagerectangle( | |
| $img, | |
| $m[6]+SAMPLE_PAD, $m[7]+SAMPLE_PAD+$baseline, # upper left x,y | |
| $m[2]+SAMPLE_PAD, $m[3]+SAMPLE_PAD+$baseline, # lower right x,y | |
| $red | |
| ); | |
| header('Content-type: image/png'); | |
| imagepng($img); |
| <?php | |
| define('SAMPLE', @$_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'] : 'abc'); | |
| define('SAMPLE_TTF', 'georgiai.ttf'); | |
| define('SAMPLE_SIZE', 100); | |
| define('SAMPLE_PAD', 50); | |
| $textDimensionsHack = imagettfbbox(SAMPLE_SIZE, 0, SAMPLE_TTF, '2'); // Strings starting with 2 are always correct | |
| $widthHack = $textDimensionsHack[2] - $textDimensionsHack[0]; // Remember width of 2 | |
| $m = imagettfbbox(SAMPLE_SIZE, 0, SAMPLE_TTF, '2'.SAMPLE); // Prepend 2 to the string to be measured | |
| $width = ($m[4]-$m[6])-$widthHack + 2*SAMPLE_PAD; // Subtract the width of 2 for the real width of the string | |
| $height = $m[1]-$m[7] + 2*SAMPLE_PAD; | |
| $baseline = abs($m[7]); | |
| $img = imagecreatetruecolor($width,$height); | |
| $red = imagecolorallocate($img,255,0,0); | |
| $white = imagecolorallocate($img,255,255,255); | |
| imagettftext( | |
| $img, | |
| SAMPLE_SIZE, # size | |
| 0, # angle | |
| SAMPLE_PAD, # x | |
| SAMPLE_PAD+$baseline, # y | |
| $white, | |
| SAMPLE_TTF, | |
| SAMPLE | |
| ); | |
| imagerectangle( | |
| $img, | |
| $m[6]+SAMPLE_PAD, $m[7]+SAMPLE_PAD+$baseline, # upper left x,y | |
| $m[2]+SAMPLE_PAD-$widthHack, $m[3]+SAMPLE_PAD+$baseline, # lower right x,y | |
| $red | |
| ); | |
| header('Content-type: image/png'); | |
| imagepng($img); |
| <html> | |
| <head> | |
| <title>Font Metrics Test</title> | |
| </head> | |
| <body style="max-width:760px; padding:20px; font-family:Verdana,Arial,sans-serif; line-height:110%;"> | |
| <h1>Font Metrics Test</h1> | |
| <p>This is <a href="metrics.info.php">PHP version <?=phpversion()?></a>.</p> | |
| <p>The font metrics output by <a href="http://php.net/imagettfbbox">imagettfbbox</a> may be incorrect on some PHP installations.</p> | |
| <p>The following sample image demonstrates the problem:</p> | |
| <p><img src="metrics.php"/></p> | |
| <p>The image above should display a red outline, precisely lined up with the bounds of the rendered glyphs - if the red line does not accurately line up with the boundaries of the type, the bug is present in your PHP installation.</p> | |
| <h3>Source Code</h3> | |
| <p>Below is the source code of "metrics.php", the output of which is embedded above.</p> | |
| <div style="padding:8px; border:dotted 1px #888;"> | |
| <? highlight_string(file_get_contents('metrics.php')); ?> | |
| </div> | |
| </body> | |
| </html> |
| <html> | |
| <head> | |
| <title>Font Metrics Test</title> | |
| </head> | |
| <body style="max-width:760px; padding:20px; font-family:Verdana,Arial,sans-serif; line-height:110%;"> | |
| <h1>Font Metrics Test</h1> | |
| <p>This is <a href="metrics.info.php">PHP version <?=phpversion()?></a>.</p> | |
| <p>The font metrics output by <a href="http://php.net/imagettfbbox">imagettfbbox</a> may be incorrect on some PHP installations.</p> | |
| <p>The following sample image demonstrates a work around to the problem:</p> | |
| <p><img src="metricsHack.php"/></p> | |
| <h3>Source Code</h3> | |
| <p>Below is the source code of "metricsHack.php", the output of which is embedded above.</p> | |
| <div style="padding:8px; border:dotted 1px #888;"> | |
| <? highlight_string(file_get_contents('metricsHack.php')); ?> | |
| </div>s | |
| </body> | |
| </html> |