Textgröße dem Bild anpassen und zentrieren

01/14/2017 00:37 xShizoidx#1
Guten Abend,

bei meinem Skript möchte ich den Text horizontal und vertikal zentriert zum Bild haben (egal welche Breiten und Höhenangaben beim Bild angegeben wurden ) und das der Text insgesamt halb so breit ist wie das Bild. Das Problem ist, dass das ganze in PHP sein muss und ich deshalb nicht weiterkomme.

Mein bisherigen Ansatz sieht folgendermaßen aus :
Code:
<?php
      $imageWidth = 300;
      $imageHeight = 500;
	
   $image = imagecreate(300, 500);
   $bgColor = imagecolorallocate($image, 155, 155, 155);
   imagefill($image, 0, 0, $bgColor);

   $textColor = imagecolorallocate($image, 0, 0, 0);
   $font = "arial.ttf"; // ARIAL SCHRIFTART
   imagettftext($image, 20, 0, 50, 50, $textColor, $font, "normal");

   header("Content-Type: image/jpeg");
   imagejpeg($image);
   imagedestroy($image);
?>
Weiß jemand, wie man das eventuell machen kann?

Mit freundlichen Grüßen,

xShizoidx
01/14/2017 01:11 False#2
Quote:
Originally Posted by xShizoidx View Post
Guten Abend,

bei meinem Skript möchte ich den Text horizontal und vertikal zentriert zum Bild haben (egal welche Breiten und Höhenangaben beim Bild angegeben wurden ) und das der Text insgesamt halb so breit ist wie das Bild. Das Problem ist, dass das ganze in PHP sein muss und ich deshalb nicht weiterkomme.

Mein bisherigen Ansatz sieht folgendermaßen aus :
Code:
<?php
      $imageWidth = 300;
      $imageHeight = 500;
    
   $image = imagecreate(300, 500);
   $bgColor = imagecolorallocate($image, 155, 155, 155);
   imagefill($image, 0, 0, $bgColor);

   $textColor = imagecolorallocate($image, 0, 0, 0);
   $font = "arial.ttf"; // ARIAL SCHRIFTART
   imagettftext($image, 20, 0, 50, 50, $textColor, $font, "normal");

   header("Content-Type: image/jpeg");
   imagejpeg($image);
   imagedestroy($image);
?>
Weiß jemand, wie man das eventuell machen kann?

Mit freundlichen Grüßen,

xShizoidx
Sowas?

Code:
<?php
const BOUNDING_UPPER_LEFT = 7;
const BOUNDING_UPPER_RIGHT = 1;
const BOUNDING_LOWER_LEFT = 0;
const BOUNDING_LOWER_RIGHT = 2;

$imageWidth = 500;
$imageHeight = 1000;

$image = imagecreate($imageWidth, $imageHeight);
$bgColor = imagecolorallocate($image, 155, 155, 155);
imagefill($image, 0, 0, $bgColor);

$textColor = imagecolorallocate($image, 255, 0, 21);
$font = "./arial.ttf";
$fontSize = 50;
$angel = 0;
$text = "Text";
$textBounding = imagettfbbox($fontSize, $angel, $font, $text);
$textWidth = $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight = $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image, $fontSize, $angel, $textPositionX, $textPositionY, $textColor, $font, $text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
01/14/2017 02:27 xShizoidx#3
Quote:
Originally Posted by .ƒaℓsє. View Post
Sowas?

Code:
<?php
const BOUNDING_UPPER_LEFT = 7;
const BOUNDING_UPPER_RIGHT = 1;
const BOUNDING_LOWER_LEFT = 0;
const BOUNDING_LOWER_RIGHT = 2;

$imageWidth = 500;
$imageHeight = 1000;

$image = imagecreate($imageWidth, $imageHeight);
$bgColor = imagecolorallocate($image, 155, 155, 155);
imagefill($image, 0, 0, $bgColor);

$textColor = imagecolorallocate($image, 255, 0, 21);
$font = "./arial.ttf";
$fontSize = 50;
$angel = 0;
$text = "Text";
$textBounding = imagettfbbox($fontSize, $angel, $font, $text);
$textWidth = $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight = $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image, $fontSize, $angel, $textPositionX, $textPositionY, $textColor, $font, $text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
Danke für die schnelle Antwort.
Mit der Positionierung ist das perfekt. Allerdings habe ich nun noch das Problem, dass sich die Schriftgröße nicht der Breite und der Höhe anpasst.
Wenn ich es beispielsweise auf 5000 x 5000 abänder, sehe ich den Text kaum noch und wenn ich es zu klein mache, dann ist der Text zu groß. Am Besten wäre es , wenn die Schrift von der Breite 50% gegenüber dem Bildgröße ist.
01/14/2017 03:10 False#4
Quote:
Originally Posted by xShizoidx View Post
Danke für die schnelle Antwort.
Mit der Positionierung ist das perfekt. Allerdings habe ich nun noch das Problem, dass sich die Schriftgröße nicht der Breite und der Höhe anpasst.
Wenn ich es beispielsweise auf 5000 x 5000 abänder, sehe ich den Text kaum noch und wenn ich es zu klein mache, dann ist der Text zu groß. Am Besten wäre es , wenn die Schrift von der Breite 50% gegenüber dem Bildgröße ist.
so?

PHP Code:
<?php
const BOUNDING_UPPER_LEFT 7;
const 
BOUNDING_UPPER_RIGHT 1;
const 
BOUNDING_LOWER_LEFT 0;
const 
BOUNDING_LOWER_RIGHT 2;

$imageWidth 5000;
$imageHeight 5000;

$image imagecreate($imageWidth$imageHeight);
$bgColor imagecolorallocate($image155155155);
imagefill($image00$bgColor);

$textColor imagecolorallocate($image255021);
$font "./arial.ttf";
$fontSize $imageWidth 10 *2;
$angel 0;
$text "Text";
$textBounding imagettfbbox($fontSize$angel$font$text);
$textWidth $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image$fontSize$angel$textPositionX$textPositionY$textColor$font$text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
Änderung :


PHP Code:
$fontSize $imageWidth 10 *2
01/14/2017 16:40 xShizoidx#5
Quote:
Originally Posted by .ƒaℓsє. View Post
so?

PHP Code:
<?php
const BOUNDING_UPPER_LEFT 7;
const 
BOUNDING_UPPER_RIGHT 1;
const 
BOUNDING_LOWER_LEFT 0;
const 
BOUNDING_LOWER_RIGHT 2;

$imageWidth 5000;
$imageHeight 5000;

$image imagecreate($imageWidth$imageHeight);
$bgColor imagecolorallocate($image155155155);
imagefill($image00$bgColor);

$textColor imagecolorallocate($image255021);
$font "./arial.ttf";
$fontSize $imageWidth 10 *2;
$angel 0;
$text "Text";
$textBounding imagettfbbox($fontSize$angel$font$text);
$textWidth $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image$fontSize$angel$textPositionX$textPositionY$textColor$font$text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
Änderung :


PHP Code:
$fontSize $imageWidth 10 *2
Sehr gut, danke dir, habe noch die 10 in 20 abgeändert und nun passt es wunderbar. Mir ist gerade aufgefallen ,dass die Textqualität bei kleinen Bildern sehr schlecht ist, gibt es da eventuell ein Trick? (es soll weiterhin .jpg sein)
Des Weiteren habe ich noch die Frage, ob man einfach die Windows Schriftarten bei sich auf den Server hochladen darf und verwenden kann oder ob man da lizensrechtliche Probleme bekommt?

Code:
<?php
const BOUNDING_UPPER_LEFT = 7;
const BOUNDING_UPPER_RIGHT = 1;
const BOUNDING_LOWER_LEFT = 0;
const BOUNDING_LOWER_RIGHT = 2;

$imageWidth = 333;
$imageHeight = 333;

$image = imagecreate($imageWidth, $imageHeight);
$bgColor = imagecolorallocate($image, 155, 155, 155);
imagefill($image, 0, 0, $bgColor);

$textColor = imagecolorallocate($image, 255, 0, 21);
$font = "./arial.ttf";
$fontSize = $imageWidth / 20 * 2;
$angel = 0;
$text = "placeholder";
$textBounding = imagettfbbox($fontSize, $angel, $font, $text);
$textWidth = $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight = $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image, $fontSize, $angel, $textPositionX, $textPositionY, $textColor, $font, $text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
?>
01/14/2017 18:07 False#6
Quote:
Originally Posted by xShizoidx View Post
Sehr gut, danke dir, habe noch die 10 in 20 abgeändert und nun passt es wunderbar. Mir ist gerade aufgefallen ,dass die Textqualität bei kleinen Bildern sehr schlecht ist, gibt es da eventuell ein Trick? (es soll weiterhin .jpg sein)
Des Weiteren habe ich noch die Frage, ob man einfach die Windows Schriftarten bei sich auf den Server hochladen darf und verwenden kann oder ob man da lizensrechtliche Probleme bekommt?

Code:
<?php
const BOUNDING_UPPER_LEFT = 7;
const BOUNDING_UPPER_RIGHT = 1;
const BOUNDING_LOWER_LEFT = 0;
const BOUNDING_LOWER_RIGHT = 2;

$imageWidth = 333;
$imageHeight = 333;

$image = imagecreate($imageWidth, $imageHeight);
$bgColor = imagecolorallocate($image, 155, 155, 155);
imagefill($image, 0, 0, $bgColor);

$textColor = imagecolorallocate($image, 255, 0, 21);
$font = "./arial.ttf";
$fontSize = $imageWidth / 20 * 2;
$angel = 0;
$text = "placeholder";
$textBounding = imagettfbbox($fontSize, $angel, $font, $text);
$textWidth = $textBounding[BOUNDING_LOWER_RIGHT] - $textBounding[BOUNDING_LOWER_LEFT];
$textHeight = $textBounding[BOUNDING_UPPER_LEFT] - $textBounding[BOUNDING_UPPER_RIGHT];
$textPositionX = ($imageWidth/2) - ($textWidth/2);
$textPositionY = ($imageHeight/2) - ($textHeight/2);
imagettftext($image, $fontSize, $angel, $textPositionX, $textPositionY, $textColor, $font, $text);

header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
?>
Wegen der Lizenz musst du dich selber informieren.
Wegen der Qualität habe ich so auf die schnelle nichts gefunden.
01/16/2017 15:44 xShizoidx#7
bei einem png habe ich das Problem nun gott sei dank nicht mehr, Problem gelöst