mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 09:28 Benutzername: Passwort: Auto-Login

Thema: [php] ImageTTFBbox vom 07.06.2004


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [php] ImageTTFBbox
Autor Nachricht
donnerchen
Threadersteller

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst Mo 07.06.2004 07:45
Titel

[php] ImageTTFBbox

Antworten mit Zitat Zum Seitenanfang

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*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
eViLaSh

Dabei seit: 22.05.2003
Ort: Texas
Alter: 40
Geschlecht: Männlich
Verfasst Mo 07.06.2004 08:37
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
donnerchen
Threadersteller

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst Mo 07.06.2004 08:41
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
donnerchen
Threadersteller

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst Mo 07.06.2004 14:51
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Di 08.06.2004 10:02
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
donnerchen
Threadersteller

Dabei seit: 06.04.2003
Ort: -
Alter: 53
Geschlecht: Männlich
Verfasst Di 08.06.2004 10:09
Titel

Antworten mit Zitat Zum Seitenanfang

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 ....
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [php] imageTTFBbox will nich so recht…
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.