ID:               43073
 Comment by:       mmcnicklebugs at googlemail dot com
 Reported By:      lbayuk at pobox dot com
 Status:           Assigned
 Bug Type:         GD related
 Operating System: Linux
 PHP Version:      5.2CVS-2008-11-02
 Assigned To:      pajoye
 New Comment:

[PATCH]

For reference: pre-patch image of test-case [1]

The problem was due to using the wrong center of rotation when rotating
the bounding box. I've written a patch [2] to set the correct the
coordinates. This appears to have fixed the problem as seen in this
image [3].

In image [3] the bounding boxes don't seem to correspond to the actual
bounds of the text (the fitting is a bit loose). Do you think this is
another (separate) bug?

[1] http://whompbox.com/patches/php/gd/43073/ttf_bug.png
[2] http://whompbox.com/patches/php/gd/43073/gdft.patch
[3] http://whompbox.com/patches/php/gd/43073/ttf_fix.png

-- Martin McNickle


Previous Comments:
------------------------------------------------------------------------

[2008-11-02 22:16:31] lbayuk at pobox dot com

I tried php5.2-200811022130 (PHP 5.2.7RC3-dev).
The problem is still there, and the image is identical to PHP-5.2.6.
(I was using 5.2.4 when I originally submitted this report, so I
changed the version in the report to 5.2.6).

------------------------------------------------------------------------

[2008-11-02 13:07:53] j...@php.net

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/



------------------------------------------------------------------------

[2007-10-23 00:18:33] lbayuk at pobox dot com

Description:
------------
The bounding box returned from imagettfbbox() and imagettftext() is
incorrect for anything except horizontal text at 0 degrees. For all
other angles, the text is partially or completely outside the returned
bounding box. (Yes, somebody reported the same problem in #37730, but
that was marked "no feedback" and is not getting any attention. Could
someone please-please look at this issue?) The PHP script below
demonstrates. Using the bundled GD library, and any TrueType font.

Change $font to point to any TrueType font file you have.
Run via PHP CLI, sending out to filename.png and view, or access via
browser.

I wrote an equivalent C program with gd-2.0.35 (Slackware 12.0 Linux
distribution), and the bounding boxes are correct. So there is probably
something wrong in the GD library bundled with PHP.

Reproduce code:
---------------
<?php
$font = '/usr/share/fonts/TTF/luximr.ttf'; # Full path to any TTF Font
$delta_t = 360.0 / 16; # Make 16 steps around
$g = imagecreate(800, 800);
$bgnd  = imagecolorallocate($g, 255, 255, 255);
$black = imagecolorallocate($g, 0, 0, 0);
$x = 100;
$y = 0;
$cos_t = cos(deg2rad($delta_t));
$sin_t = sin(deg2rad($delta_t));
for ($angle = 0.0; $angle < 360.0; $angle += $delta_t) {
  $bbox = imagettftext($g, 24, $angle, 400+$x, 400+$y, $black, $font,
'ABCDEF');
  imagepolygon($g, $bbox, 4, $black);
  imagefilledellipse($g, $bbox[0], $bbox[1], 8, 8, $black);
  $temp = $cos_t * $x + $sin_t * $y;
  $y    = $cos_t * $y - $sin_t * $x;
  $x    = $temp;
}
header("Content-type: image/png");
imagepng($g);

Expected result:
----------------
In the image output: For each angle of text, the box should enclose the
text, with the dot to the lower left (relative to the text baseline) of
the first character in the string.


Actual result:
--------------
The bounding box for 0 degree text is correct. All the others are off
by different amounts. Worst is the text between 180 and 270 degrees,
where the text is completely outside the bounding box.



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=43073&edit=1

Reply via email to