Autor |
Nachricht |
donnerchen
Threadersteller
Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht:
|
Verfasst Mo 07.06.2004 07:45
Titel [php] ImageTTFBbox |
|
|
Hai Leute
Also, imagettfbbox() ist ja ne prima Funktion. Nur habe ich zwei Probleme
damit. Hier erstmal die Rückgabe wenn ich die Ausgabegröße eines V (mit 0
Grad) berechnen lasse:
Array
(
[0] => -1
[1] => -1
[2] => 7
[3] => -1
[4] => 7
[5] => -20
[6] => -1
[7] => -20
)
Wenn wirklich erst "Links-Unten" angegeben wird und die anderen Punkte dann
gegen den Uhrzeigersinn angegeben werden, dann wird die X-Achse positiv
angegeben und die Y-Achse negativ. Kann das richtig sein? Wer denkt sich
denn sowas aus? *dummguck*
Wenn ich angebe, dass die Ausgabe gedreht werden soll, um welchen Punkt
dreht die Funktion dann? Imagettftext() nimmt "Links-Unten" als Bezugspunkt.
Lasse ich mein V um 38 Grad drehen berechnet imagettfbbox() folgendes:
Array
(
[0] => -13
[1] => 7
[2] => 3
[3] => -4
[4] => -10
[5] => -20
[6] => -24
[7] => -10
)
Offensichtlich wird nicht der Punkt Links-Unten als Bezug genommen. Dreht
die Funktion um den Mittelpunkt?
Ach so, ich nutze PHP 4.3.6
*wink*
|
|
|
|
|
eViLaSh
Dabei seit: 22.05.2003
Ort: Texas
Alter: 40
Geschlecht:
|
Verfasst Mo 07.06.2004 08:37
Titel
|
|
|
ImageTTFBBox() gibt ein Array mit acht Werten zurück. Diese enthalten die vier Punkte, durch die der Ausgabebereich markiert wird:
0 untere linke Ecke, X-Position
1 untere linke Ecke, Y-Position
2 untere rechte Ecke, X-Position
3 untere rechte Ecke, Y-Position
4 obere rechte Ecke, X-Position
5 obere rechte Ecke, Y-Position
6 obere linke Ecke, X-Position
7 obere linke Ecke, Y-Position
Die Punkte sind relativ zum text. Ohne Rücksicht auf den Winkel ist oben-links also die obere linke Ecke, wobei die Textausgabe horizontal gesehen wird.
|
|
|
|
|
Anzeige
|
|
|
donnerchen
Threadersteller
Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht:
|
Verfasst Mo 07.06.2004 08:41
Titel
|
|
|
Das ist schon klar. Aber wie ist das Koordinatensystem aufgebaut? Wird die Y-Achse wirklich negativ abgetragen? Wo liegt der Drehpunkt wwenn ich einen Drehwinkel angebe?
|
|
|
|
|
donnerchen
Threadersteller
Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht:
|
Verfasst Mo 07.06.2004 14:51
Titel
|
|
|
Gut, da mir niemand helfen konnte habe ich mir halt selbst geholfen. ImgaeTTFBbox() ist leider noch fehlerhaft. Somit habe ich eine eigene Funktion geschrieben die so aussieht:
function my_imagettfbbox($fnt_size,$angle,$fnt_file,$string)
{
// Winkel in Bogenmass umrechnen
$angle=deg2rad($angle);
$bbox=imagettfbbox($fnt_size,0,$fnt_file,$string);
// Werte so korrigieren, dass Unten Links 0,0 ist
// Werte der Y-Achse werden positiv dargestellt
$x_offset=$bbox[0];
$y_offset=$bbox[1];
for ($count=0; $count<8; $count +=2)
{
$bbox[$count]=abs($bbox[$count]-$x_offset); // Korrigieren der X-Werte
$bbox[$count+1]=abs($bbox[$count+1]-$y_offset); // Korrigieren der Y-Werte
}
// Unten Links bleibt unverändert da es der Drehpunkt ist
// Unten Rechts neu berechnen
// Radius des Kreises entspricht $bbox[2]
$radius=$bbox[2];
$bbox[2]=round(cos($angle)*$radius);
$bbox[3]=round(sin($angle)*$radius);
// Oben Rechts berechnen
// Radius mit dem Satz des Pythagoras berechnen
$radius=sqrt (pow($bbox[4],2)+pow ($bbox[5],2));
$old_angle=acos($bbox[4]/$radius);
$bbox[4]=round (cos($old_angle+$angle)*$radius);
$bbox[5]=round (sin($old_angle+$angle)*$radius);
// Oben Link berechnen
// Radius des "Kreises" entspricht $bbox[7]
$radius=$bbox[7];
$old_angle=deg2rad(90);
$bbox[6]=round (cos($old_angle+$angle)*$radius);
$bbox[7]=round (sin($old_angle+$angle)*$radius);
return ($bbox);
}
Vielleicht braucht's ja mal jemand
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Di 08.06.2004 10:02
Titel
|
|
|
donnerchen hat geschrieben: | Gut, da mir niemand helfen konnte habe ich mir halt selbst geholfen.
ImageTTFBbox() ist leider noch fehlerhaft. |
Die Funktion ist nicht fehlerhaft.
Hättest Du dir mal die Kommentare in der PHP-Doku angesehen,
hättest Du sofort korrigierende Funktionen gefunden.
http://de.php.net/manual/en/function.imagettfbbox.php
Außerdem ein Info, wieso die Funktion diese Werte ausgibt.
Zitat: | There seems to be a little confusion regarding the font coordinate system.
PHP's TTF functions will make more sense after you understand the principals
of font creation. This guy wrote a really good overview...
http://pfaedit.sourceforge.net/overview.html |
|
|
|
|
|
donnerchen
Threadersteller
Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht:
|
Verfasst Di 08.06.2004 10:09
Titel
|
|
|
Nein, nein, die Funktion ist nach wie vor buggy. Steht auch in den Kommentaren. Darum hat dort auch jemand ne Funktion geschrieben welche die Daten korrigiert. Leider habe ich die dann aber auch erst gesehen als ich meine fertig hatte *schäm*
imagettfbbox() verrechnet sich ganz stumpf. Meist ist das berechnete Quadrat (wenn mit einem Drehwinkel gearbeitet wird) doppelt so groß. Kannst Du ja mal in ein Korrdinatensystem einzeichnen, dann wirst Du's feststellen. Leider weiß ich nicht welche Version meine GD hat. Mag sein, dass andere GDs sich anders verhalten.
Den zweiten Link den Du zitiert hast habe ich mir auch angeschaut. Trotzdem erscheint es wenig Sinnvoll die Y-Achse negativ abzutragen wenn ich das Ergebnis von imagettfbbox() als Grundlage für eine Ausgabe mit imagettftext() nehman will. Und was dort auch nicht erklärt sird ist, warum imagettfbbox die Koordianten des Nullpunkts nicht auf 0,0 sonder meist auf -1,-1 legt ....
|
|
|
|
|
|
|
|
Ähnliche Themen |
[php] imageTTFBbox will nich so recht…
|
|