Schrift in der Diagonalen centern

obaran

Erfahrenes Mitglied
Hallo,

ich bin grad dabei eine Funktion zu schreiben die mir einen Text in der Diagonalen
zentriert darstellt.
Nur leider muss da noch etwas falsch dran sein, da er den Text nicht wirklich
zentriert darstellt wird. ;(

PHP:
function center($picsize, $txtsize){
	/*
	$picsize[0] = Breite
	$picsize[1] = Hoehe
	
	$txtsize[0] = x unten links
	$txtsize[1] = y unten links
	$txtsize[2] = x unten rechts
	$txtsize[3] = y unten rechts
	$txtsize[4] = x oben rechts
	$txtsize[5] = y oben rechts
	$txtsize[6] = x unten rechts
	$txtsize[7] = y unten rechts
	
	Diese Funktion gibt ein array mit den x und y Koordinaten zurück
	um das Textfeld in dem Bild quer zu zentrieren.
	*/
	
	$alpha = 90 - rad2deg(atan($picsize[0] / $picsize[1])); // Der Winkel alpha in Grad (Diagonale zu Außenbildrand links)
	$d     = sqrt(pow($picsize[0], 2) + pow($picsize[1], 2)); //Diagonale des Außenbildes
	$dt    = sqrt(pow(($txtsize[2] - $txtsize[0]), 2) + pow(($txtsize[3] - $txtsize[1]), 2)); //Textlänge
	//$dt = sqrt(pow(($r[2]-$r[0]), 2)+pow(($r[3]-$r[1]), 2));
	$th = sqrt(pow(($txtsize[6]-$txtsize[0]), 2) + pow(($txtsize[7]-$txtsize[1]), 2));
	$dr0 = ($th / 2) / tan(deg2rad($alpha));
	$dt += 2*$dr0;
	
	$dr    = ($d - $dt) / 2; // Diagonale(d) - Textlänge(dt) durch 2
	
	$dx = $dr / sin(deg2rad(90-$alpha));
	$ddy = tan(deg2rad(90 - $alpha))*($dx-$txtsize[0]);
	$ddy = $picsize[1] - $ddy;
	return (array($dx, $ddy));
}
$font_size=300;
$txt = "Toller Text";
$size = getimagesize($pic);
$d = sqrt(pow($size[0], 2) + pow($size[1], 2));
$angle = 90-rad2deg(atan($size[0] / $size[1]));

do{
	$font_size--;
	$r = imagettfbbox($font_size, $angel, $font, $txt);
	if($font_size < 1) die("abbbruch");
	$dt = sqrt(pow(($r[2]-$r[0]), 2)+pow(($r[3]-$r[1]), 2));
	$th = sqrt(pow(($r[6]-$r[0]), 2) + pow(($r[7]-$r[1]), 2));
	$dr0 = ($th / 2) / tan(deg2rad($angle));
	$dt += 2*$dr0;
}while($dt > $d);
$font_size *= 0.9;
$r = imagettfbbox($font_size, $angel, $font, $txt);
list($x, $y) = center($size, $r);

Kann mir da einer weiterhelfen?

Thx Oliver
 
*looool* Sorry, sorry, sorry! Nicht böse gemeint, aber ich hab gerade versucht Deinen Quelltext zu "überfliegen"! ;)

Ähm, was genau willst Du machen? Aus Deinem Source Code werd ich irgendwie nicht ganz schlau. Aber so wie ich das verstehe möchtest Du einen bestimmten Text diagonal zentrieren. Okay, aber diagonal in welchem Konstrukt. Da das ganze in PHP läuft nehme ich mal an auf einer HTML-Seite oder einer Tabellenzelle, d.h. in einem Rechteck-Gebilde.
Folglich wäre doch die Mitte der Diagonalen gleich der Mitte der Tabellenzelle. Wieso also zentrierst Du nicht einfach vertikal und horizontal zugleich? Damit sitzt Dein Text in der Mitte der Tabellenzelle und sogleich auf der Mitte der Diagonalen.

Zulösen wäre das am besten per CSS:
Code:
TD.centertext
{
text-align: center;
vertical-align: center;
width: 100%;
}

...

<table cellpadding="0" cellspacing="0" border="0" width="100%">
   <tr>
      <td class="centertext">Test</td>
   </tr>
</table>

Wenns das nicht war was Du wolltest, dann erklär mal bitte etwas genauer, was Du mit diagonal zentrieren meinst. :)
 
Hi Saber,
also ich habe ein quell Bild und in dieses möchte ich einen Text diagonal reinschreiben.

Die do-while Schleife dient dazu die maximalste Text größe zu bestimmen.

Durch die funktion center will ich das ganze dann zentriert / diagonal in dem quell
Bild darstellen.

Oli
 
Axo, ein Bild. Das ist schon was anderes. Aber prinzipiell doch das selbe. Nimm die Höhe des Bildes und teile sie durch 2. Das selbe machst Du anschließend mit der Breite des Bildes. Dann hast Du schon mal die Mitte des Bildes, was wiederum das Zentrum der Diagonalen bildet.

Nun berechnest Du die Höhe der Schrift sowie die Breite. Wiederum erhältst Du den Mittelpunkt. Anschließend ziehst Du die beiden Resultate (Hälfte der Breite, Hälfte der Höhe) von der Gesamthöhe sowie von der Gesamtbreite des Bildes ab. An diesen Koordinaten schreibst Du dann den Text in das Bild. Der Text sollte nun zentriert dargestellt werden.

Ich schreibs mal ein bisschen sehr ausführlich, damit mans besser verstehen kann:
Code:
// Ausgangswerte (müssen programmtechnisch ermittelt werden)
$bildbreite = 640;
$bildhoehe = 480;
$textbreite = 100;
$texthoehe = 12;

// Bestimmung der Mitte des Bildes
$bildbreitehaelfte = $bildbreite / 2;
$bildhoehehaelfte = $bildhoehe / 2;

// Bestimmung der Mitte des Bildes
$textbreitehaelfte = $textbreite / 2;
$texthoehehaelfte = $texthoehe / 2;

// Ausgabekoordinaten für den Text finden
$xkoordinaten = $textbreite - $textbreitehaelfte;
$ykoordinaten = $texthoehe - $texthoehehaelfte;

// Weiterer Code zum Schreiben des Textes in das Bild
// HIER
Habs nicht getestet, sollte aber klappen. :)
 
Aber damit schreibst Du doch den Text nur wagerecht rein, oder?

In den Anhang stelle ich mal mein momentanes Script rein.
Nach meinen Überlegungen auf dem Papier müsste es eigentlich klappen.
Aber er schreibt mir den Text noch nicht richtig an die richtige stelle.
D.h. der Text liegt noch zu hoch in der y-ebene.

Grüße
Oli

Edit:
Zeile 111 sollte eeigentlich so heißen:
Code:
$ddy = $size[1] - $ddy;
 

Anhänge

Zuletzt bearbeitet:
Aaaaaaaaaaaaaaaaaaaaaaaaaachso

Jetzt hab ich´s. Der Text soll um 45° gedreht werden und zentriert im Bild dargestellt werden, oder wie!

Schwere Geburt ... *fg* ;)
 
Naja nicht immer 45° nur wenn Breite=Höhe ansonsten eben Diagonal.

Bei Fragen fragen :)

Ich glaube ich habe wieder mal ein Brett vorm Kopf...

Grüße
Oli
 
Also wie genau man den Text mittels PHP dreht weiss ich nicht. Ich schätze mal eine Art "Image" erzeugen, den Text reinschreiben und das Bild drehen. Anschließend irgendwie ineinander kopieren. Aber das sind nur Vermutungen. ;)

Dennoch kannst Du zumindest mit meinem Quelltext den Text zentrieren. Aber wie man den Text dreht weiss ich nicht. In C#.NET könnt ich´s Dir sagen. *fg* :)
 
Zurück