PHP GD - Schriftzug... und ich blicks nicht mehr

braegler

NGBler
Registriert
14 Juli 2013
Beiträge
873
Tach zusammen,
ich hab die letzten Tage eines meiner Projekte von einem älteren Server auf einen neuen Server umgezogen.
Alles Prima, nur macht mir ein Problem mit GD nun ein Strich durch die Rechnung.

Hintergrund:
Ich betreibe (unter anderem) die Seite Wolffiles.de, bei der es rund um RtCW und Enemy Territory geht, mit massig Maps, Mods, Testservern und Co.
In der Datei-Ansicht hatte ich (bis zum Umzug) mittels GD einen Schriftzug eingeblendet, der nun aber ums Verrecken nicht mehr will.

Hier mal der Code dazu:
[src=php]<?php

$fullwidth=600;
$fullheight = 100;
$ttf="/srv/www/wolffiles/work/wolfenstein.ttf";
$text=$_GET['txt'];

Header ("Content-type: image/gif");

$size=30;

$sstart = 10;

do {
$sstart = $sstart + 10;
$recttmp = imagettfbbox($sstart, 0, $ttf, $text);
$twidth = abs($recttmp[2]);
$theight = abs($recttmp[7]);
} while ($twidth < $fullwidth AND $theight < $fullheight);

$size = $sstart - 13;
$mysize = $size;


$rect = imagettfbbox($size, 0, $ttf, $text);
$width = abs($rect[2]);
$half = $width / 2;
$halfwidth = $fullwidth / 2;
$height = abs($rect[7]);
$off = $halfwidth - $half;




$heightoff = 100 - ($fullheight - $height) / 2;
$newheight = $height + 2;
$newheight = $fullheight + 20;

$im = imagecreate ($fullwidth, $newheight );
$black = ImageColorAllocate ($im, 0, 0, 0);
$index = imagecolorexact($im, 0, 0, 0);
imagecolortransparent($im, $index);





$white = ImageColorAllocate ($im, 195, 4, 5);
ImageTTFText ($im, $size, 0, $off, $heightoff, $white, $ttf, "$text" );
ImageGif ($im);
ImageDestroy ($im);
?>[/src]

Aufgerufen wird der z.B. mittels Bild Source =

Ich steh nun absolut auf dem Schlauch, wieso das nicht mehr will wie es soll.

Kann mir jemand von Euch einen Tipp geben, woran das liegen könnte.

Vielen Dank schonmal
 
ändere doch mal bitte den header auf txt statt gif - dann sollte der Quelltext der erzeugt wird ersichtlich sein
 
hm - ein .gif wird in jedem Fall erzeugt - und nicht stattdessen ein Fehler zurück gegeben... evtl. kann die .ttf wegen Rechten / owner nicht gelesen werden?
 
[src=php]
do {
$sstart = $sstart + 10;
$recttmp = imagettfbbox($sstart, 0, $ttf, $text);
$twidth = abs($recttmp[2]);
$theight = abs($recttmp[7]);
} while ($twidth < $fullwidth AND $theight < $fullheight);
[/src]

Das ist ja nicht gerade der effizienteste Algorithmus. ;) Das braucht für das Wort Test mindestens 11 Iterationen (hab allerdings auch eine andere Schriftart zum Testen verwendet).

Vielleicht steigt Dein Server irgendwann aus, weil er daran zu lange rechnet. Kommentiere die Zeilen mit do und while doch mal aus und prüfe, ob er es mit kleiner Schriftgröße sofort rendert.
 
  • Thread Starter Thread Starter
  • #8
Vielen Dank für den Tipp.
Hat leider nichts gebracht.
Hab nun aus lauter Verzweiflung mal eine andere TTF genommen, plötzlich gings.
Das macht mich fertig :(
MD5s der TTF auf altem und neuem Server sind identisch, also keine Änderung daran.
Auf dem alten läufts, auf dem neuen nicht.

Hab jetzt aber eine Ersatz-TTF gefunden, die der ursprünflichen sehr ähnelt und funktioniert.

Vielen Dank Euch allen.

Bsp:
 
Bist du dir sicher, dass die Rechte deiner ursprünglich verwendeten TTF korrekt gesetzt waren? Möglicherweise war sie vom Webserver nicht lesbar?

Unabhängig davon würde sich anbieten, Anstelle der generierten Bilder CSS-@font-face-Deklarationen zu benutzen. Um die Font-Dateien in den für verschiedene Browser benötigten Formaten zu erstellen, kannst du etwa nutzen. Dies hat den Vorteil, dass der Text weiterhin im Klartext in deinem HTML-Markup sichtbar und damit für Suchmaschinen, Screenreader oder die Suchfunktion zugänglich bleibt. Ausserdem ist die Qualität auf Bildschirmen mit hoher Pixeldichte und Gerätepixel-unabhängigen CSS-Pixeln (z.B. Tablets, Smartphones, aber auch einige Laptops) wesentlich besser, da die Font dann mit der benötigten Auflösung gerendert werden kann.
 
  • Thread Starter Thread Starter
  • #10
Die Rechte waren richtig gesetzt, sonst hätte ich was davon in der error.log gefunden (gerade getestet).

Die CSS Lösung werd ich auf jeden Fall noch versuchen. Muss nur erst noch ein paar andere Projekte (splatterladder.com zum Beispiel) fertig umziehen.

Vielen Dank für Euren Input :)
 
humm was auch sein kann, ist die datei groß geschrieben oder klein, also der erste buchstabe
oder so .. mir iss das beim cssdingens auch schon passiert, daß der font eingetragen war als grosbustabe als erstes und nachher was das ganze klein rüberkopiert worden, weil ich im Total commander vergessen hatte, den hacken "alles in kleinschrift zu kopieren" raus zu nehmen .. dummer fehler , passiert aber einem nur einmal *g*
jo, die ganze suche ..
und die CSSlösung iss die :

[src=css]
/* Font-Family */

@font-face { font-family:dose ; src:url(ttf/DOSEGA.ttf) format("truetype"); }
@font-face { font-family:fixy ; src:url(ttf/fixedsys.ttf) format("truetype"); }

.beispiel { background-color:#000000 ; font-family:dose; font-size :17px; text-decoration : none ; color:#FFFFFF ; }
[/src]

und im div container oder h1 oder sonnst wo kannste dann dahinter class="beispiel" verwenden

liebe Grüße
Blacky
 
Zurück
Oben