2013-01-25 33 views
11

Ich möchte den Text, der auf dem Bild erzeugt wird, an der Mitte des Bildes ausrichten. Für den Moment weiß ich nicht, ob es möglich ist, es auszurichten. Unten ist der Code.Ausrichten von PHP Dynamischer generierter Bildtext in der Mitte

$im = @imagecreatefromjpeg('poloroid.jpg'); 

// Create some colors 
$white = imagecolorallocate($im, 255, 255, 255); 
$grey = imagecolorallocate($im, 128, 128, 128); 
$black = imagecolorallocate($im, 0, 0, 0); 
//imagefilledrectangle($im, 0, 0, 399, 29, $white); 

// The text to draw 
//$text = 'John...'; 
$fbid = $_POST["id"]; 
$text = $_POST["want"]; 
$fb_email =$_POST["email"]; 
$fb_name=$_POST["name"]; 

$uploads_dir = 'uploaded_files/'; 
// Replace path by your own font path 
$font = 'verdana.ttf'; 

//image file name 
//$name ="$fbid.png"; 
$name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder 

// Add some shadow to the text 
imagettftext($im, 20, 0, 25, 126, $grey, $font, $text); 

// Add the text 
imagettftext($im, 20, 0, 25, 125, $black, $font, $text); 

// Using imagepng() results in clearer text compared with imagejpeg() 
//imagepng($im); 
imagepng($im,$name,9); 
imagedestroy($im); 

danke für die Hilfe Jungs.

Antwort

1

Ich habe Ihren Code aktualisiert ein wenig:

function ImageTTFCenter($image, $text, $font, $size, $angle = 45) 
{ 
    $xi = imagesx($image); 
    $yi = imagesy($image); 

    $box = imagettfbbox($size, $angle, $font, $text); 

    $xr = abs(max($box[2], $box[4])); 
    $yr = abs(max($box[5], $box[7])); 

    $x = intval(($xi - $xr)/2); 
    $y = intval(($yi + $yr)/2); 

    return array($x, $y); 
} 

$im = @imagecreatefromjpeg('poloroid.jpg'); 

// Create some colors 
$white = imagecolorallocate($im, 255, 255, 255); 
$grey = imagecolorallocate($im, 128, 128, 128); 
$black = imagecolorallocate($im, 0, 0, 0); 
//imagefilledrectangle($im, 0, 0, 399, 29, $white); 

// The text to draw 
//$text = 'John...'; 
$fbid = $_POST["id"]; 
$text = $_POST["want"]; 
$fb_email =$_POST["email"]; 
$fb_name=$_POST["name"]; 

$uploads_dir = 'uploaded_files/'; 
// Replace path by your own font path 
$font = 'verdana.ttf'; 

//image file name 
//$name ="$fbid.png"; 
$name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder 

list($x, $y) = ImageTTFCenter($im, $text, $font, 20) 
// Add some shadow to the4 text 
imagettftext($im, 20, 0, $x, $y+1, $grey, $font, $text); 

// Add the text 
imagettftext($im, 20, 0, $x, $y, $black, $font, $text); 

// Using imagepng() results in clearer text compared with imagejpeg() 
//imagepng($im); 
imagepng($im,$name,9); 
imagedestroy($im); 

Die ImageTTFCenter Funktion wird das Zentrum finden Koordinaten von Ihnen Bild, das Sie imagettftext

+0

es das Starten des Textes in der Mitte ausgerichtet ist, aber den Text nicht zentriert. Verstehst du was ich meine? –

17
$im = @imagecreatefromjpeg('poloroid.jpg'); 

// Create some colors 
$white = imagecolorallocate($im, 255, 255, 255); 
$grey = imagecolorallocate($im, 128, 128, 128); 
$black = imagecolorallocate($im, 0, 0, 0); 
//imagefilledrectangle($im, 0, 0, 399, 29, $white); 

// The text to draw 
//$text = 'John...'; 
$fbid = $_POST["id"]; 
$text = $_POST["want"]; 
$fb_email =$_POST["email"]; 
$fb_name=$_POST["name"]; 

$uploads_dir = 'uploaded_files/'; 
// Replace path by your own font path 
$font = 'verdana.ttf'; 
$font_size = 20; 
$angle = 45; 

//image file name 
//$name ="$fbid.png"; 
$name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder 

// Get image Width and Height 
$image_width = imagesx($im); 
$image_height = imagesy($im); 

// Get Bounding Box Size 
$text_box = imagettfbbox($font_size,$angle,$font,$text); 

// Get your Text Width and Height 
$text_width = $text_box[2]-$text_box[0]; 
$text_height = $text_box[7]-$text_box[1]; 

// Calculate coordinates of the text 
$x = ($image_width/2) - ($text_width/2); 
$y = ($image_height/2) - ($text_height/2); 

// Add some shadow to the text 
imagettftext($im, $font_size, 0, $x, $y+1, $grey, $font, $text); 

// Add the text 
imagettftext($im, $font_size, 0, $x, $y, $black, $font, $text); 

// Using imagepng() results in clearer text compared with imagejpeg() 
//imagepng($im); 
imagepng($im,$name,9); 
imagedestroy($im); 
+0

Ich habe diesen Code benutzt. aber dann die Bilder nicht die gleiche Position aufgrund der Unterschied in der Breite. richtig? –

+0

Ich habe nicht verstanden, bitte seien Sie genauer. – Fr0z3n

+5

Die Zeile, die die Höhe des Textbegrenzungsrahmens berechnet, sollte lauten: $ text_height = $ text_box [7] - $ text_box [1]; - Der obige Code berechnet es fälschlicherweise als 0. Ich bin leider nicht berechtigt, einzelne Zeichen zu bearbeiten ... – John

15

Sie können stil/gd-text-Klasse verwenden, wird es zeigen. Haftungsausschluss: Ich bin der Autor.

<?php 
use GDText\Box; 
use GDText\Color; 

$im = @imagecreatefromjpeg('poloroid.jpg'); 

$textbox = new Box($im); 
$textbox->setFontSize(20); 
$textbox->setFontFace('verdana.ttf'); 
$textbox->setFontColor(new Color(0, 0, 0)); // black 
$textbox->setTextShadow(
    new Color(0, 0, 0, 80), // black color, but 60% transparent 
    0, 
    -1 // shadow shifted 1px to top 
); 
$textbox->setBox(
    0, // distance from left edge 
    0, // distance from top edge 
    imagesx($im), // textbox width, equal to image width 
    imagesy($im) // textbox height, equal to image height 
); 

// now we have to align the text horizontally and vertically inside the textbox 
// the texbox covers whole image, so text will be centered relatively to it 
$textbox->setTextAlign('center', 'center'); 
// it accepts multiline text 
$textbox->draw($text); 

$uploads_dir = 'uploaded_files/'; 
//image file name 
//$name ="$fbid.png"; 
$name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder 
imagepng($im, $name, 9); 
imagedestroy($im); 

Demonstration:

demo

+0

Ausgezeichnet mit – ropic

+0

Wie kann ich dies in coderigniter hinzufügen? – bxorcloud

-2
foreach ($user as $key=>$value){  
    $bb = imagettfbbox($value['font-size'],0,$fontname,$value['name']);  
    $WW = abs($bb[2]-$bb[0]);  
    $XX = ($value['XPos']+$WW);  
    $HH = abs($bb[5]-$bb[3]);  
    $HH +=1; 
    $HHH += $HH; 
    imagettftext($im, $value['font-size'], 0, $value['XPos'], $value['YPos'], $color[$value['color']], $fontname, $value['name']); 
    $HHH += 1; 
    $WIDE = abs($bb[2]-$bb[0]); 
    $endpoint=$value['XPos']+$WIDE; 
    $bb2 = imagettfbbox($value['font-size'],0,$fontname,$value['name']); 
    $WW2 = abs($bb2[2]-$bb2[0]);  
    $x2pos= $endpoint-$WW2;  
    imagettftext($im, $value['font-size'], 0, $x2pos, $value['YPos'], $color[$value['color']], $fontname, $value['name']); 
} 
Verwandte Themen