2010-11-16 16 views
1

J'essaie de rendre le texte aligné au centre d'une boîte en utilisant imagettftext() et une police Arial Bold standard.PHP GD - Décalage texte différent Mac vs Linux

Je développe le code sur un Mac et le texte s'aligne au centre d'une boîte comme je l'aurais cru. Mais alors je déploie mon code sur un vrai serveur Linux et il semble que l'origine du rendu du texte soit différente et que le crénage soit désactivé.

J'ai confirmé que je suis sur la dernière et la plus grande version de php et php gd sur les deux machines.

Voir un exemple images ci-dessous:

C'est ce qui se passe sur mac alt text

C'est ce qui se passe sur linux alt text

Ma question a quelqu'un l'expérience de ce avant et savoir d'un correctif ou solution de contournement pour ce problème sans devoir recourir à juste compenser le texte de quelques pixels sur le serveur Linux. Ou y at-il quelque chose qui me manque quand il s'agit de rendre le texte avec la fonction ci-dessus?

EDIT: J'utilise imagettfbbox() pour obtenir la taille du texte que je rends pour le centrer correctement (j'ai aussi essayé le rendu fictif en utilisant imagettftext() pour obtenir le cadre englobant, le problème semble être l'origine imagettftext() rend trop étrange)

EDIT 2: Peut-être est-ce une différence entre les implémentations de freetype? bien que j'espère qu'ils utilisent la même base de code

+0

Ne serait-une solution juste de détecter si vous utilisez Linux et d'ajuster en conséquence le décalage? –

+0

Eh bien, j'ai essayé, mais si vous regardez la photo de Linux, vous pouvez voir que le nombre 30 est plus proche de la ligne, puis dire le numéro 1 et tout pousser par exemple 2 pixels réels ne fonctionne que pour la première moitié et non la seconde moitié – Tristan

Répondre

0

Je n'ai jamais résolu ce problème avec le crénage étant tout faux sur un serveur Linux. J'ai donc implémenté ma propre solution de crénage en dessinant chaque caractère séparément avec les informations de position pour l'espacement requis entre les caractères.

Si quelqu'un obtient jamais une bonne solution qui serait fantastique

0

Essayez de faire usage de imagettfbbox:

http://www.php.net/manual/en/function.imagettfbbox.php

Il vous donne la zone de délimitation (efficace largeur et hauteur) du texte occupera afin que vous puissiez déterminer où placer le texte avant de l'écrire sur l'image.

+0

J'utilise en fait l'imagettfbbox pour obtenir la taille du texte afin de pouvoir le centrer correctement, mais le problème semble être sur linux le texte est décalé d'un endroit différent – Tristan