[PHP] imagettftext vertikaal, arial, 111 scheef

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Gekke titel, maar ook een gek probleem.

Deze code:
PHP:
1
2
3
4
5
6
7
  header('Content-Type: image/png');
  $im = imageCreateTrueColor(20, 160);
  $textcolor = imageColorAllocate($im, 0, 0, 0);
  $white = imageColorAllocate($im, 255, 255, 255);
  imagefill($im, 0, 0, $white);
  imagecolortransparent($im, $white);
  imagettftext($im, 11, -90, 4, 12, $textcolor, "arial.ttf", "1111111");


Levert dit op:
Afbeeldingslocatie: http://www.guillome.nl/dump/111.png

Hoe kan dat? Alleen met arial, andere fonts gaan goed. Ten minste... arial narrow is ook fout, helvetica is fout, arial bold is goed, verdana is goed..

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

Verwijderd

Heel vaag inderdaad... ik heb het ook even geprobeerd en heb hetzelfde probleem, terwijl iedere andere string die ik geprobeerd heb, zoals 'abcdefg' gewoon goed gerenderd wordt.

een oplossing (lees: workaround) kan zijn om de tekst gewoon horizontaal te renderen en die image over een andere heen te copieren, ik denk zelfs dat dit een strakker resultaat oplevert

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Dat werkt inderdaad! Thanks, had ik niet aan gedacht :D

PHP:
1
2
3
4
5
6
7
8
9
10
  $p = getVal("p");
  header('Content-Type: image/png');
  $im2 = imageCreateTrueColor(150, 20);
  $textcolor = imageColorAllocate($im2, 0, 0, 0);
  $white = imageColorAllocate($im2, 255, 255, 255);
  imagefill($im2, 0, 0, $white);
  imagecolortransparent($im2, $white);
  imagettftext($im2, 10.5, 0, 4, 12, $textcolor, "arial.ttf", "Periode $p");
  $im2 = imagerotate($im2, -90, $white);
  imagePng($im2);

[ Voor 79% gewijzigd door Guillome op 23-11-2010 16:46 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Kompaan
  • Registratie: Juni 2009
  • Laatst online: 02-12-2022
Zou toch gewoon moeten werken?

Zal een foutje zijn in de berekening/rendering in imagettftext van TTFs met "speciale" hinting/kerning o.i.d... Als het alleen misgaat met sommige fonts...

Je zou een testje kunnen doen met een string met "1"en en andere tekens, kijken of hij elke keer bij een 1 verspringt. Testje met 270 (ipv -90) graden zou ook interessant kunnen zijn.

Daarna bug report naar PHP? (Ik doe tegenwoordig niks meer met PHP)

Acties:
  • 0 Henk 'm!

Verwijderd

Niet alleen met sommige fonts ... meer met sommige fonts en bepaalde tekenreeksen... '000000' levert een goed resultaat op in Arial terwijl '11111111' een vage verschuiving krijgt.

Uit mijn snelle tests lijkt het te gebeuren als er een aantal keer '1' na elkaar komt ... want 1001010101 gaat gewoon goed terwijl 100111000 vanaf de 3 x '1' fout gaat.

Kan natuurlijk ook zijn dat er iets in de font definitie fout zit bij het Arial font, ik meen dat PHP deze gewoon gebruikt

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Idd, 270 gaat fout, idem als dubbele 1tjes. Ook in andere op-arial-lijkende-fonts.
Ik zou zeggen tegen Kompaan die het niet gelooft: probeer het :)

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Kompaan
  • Registratie: Juni 2009
  • Laatst online: 02-12-2022
Ik geloof het juist wel, ben alleen erg benieuwd waar het nou door komt...

"Het zou gewoon moeten werken" was bedoelt als commentaar op de workaround, dat dat niet nodig zou moeten zijn.

Ik heb helaas niet echt de tijd om mij hier verder in te verdiepen.

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Het is inderdaad een vreemde fout, maar niet in PHP denk ik. Aangezien andere fonts (oa arial bold) wel goed gaan.
Ik denk dat het een gek iets in het font is, waar PHP niet mee om weet te gaan. Tja, wiens fout is het dan :P

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1