entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Crear imagen y añadir texto al centro en php

Hola amigos hoy me a nacido una duda después de buscar una manera de pasar texto a imágenes en php recién e logrado una forma básica.

<?php
// Establecer el tipo de contenido
header('Content-Type: image/png');

// Crear la imagen
$im = imagecreatetruecolor(400, 400);

// Crear algunos colores
$blanco = imagecolorallocate($im, 255, 255, 255);
$gris = imagecolorallocate($im, 128, 128, 128);
$negro = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 400, 400, $gris);

// El texto a dibujar
$texto = 'Convertir texto a imagen con PHP';
// Reemplace la ruta por la de su propia fuente
$fuente = 'Galpon-Black.otf';

// Añadir algo de sombra al texto
imagettftext($im, 20, 0, 11, 21, $gris, $fuente, $texto);

// Añadir el texto
imagettftext($im, 20, 0, 150, 200, $negro, $fuente, $texto);

// Usar imagepng() resultará en un texto más claro comparado con imagejpeg()
imagepng($im);
imagedestroy($im);
?>

Si ustedes ejecutan este código crea la imagen y añade el texto pero si el texto es demasiado largo lo deja fuera de la imagen en pocas palabras lo que busco es que el texto sin importar el tamaño se ajuste al centro de la imagen.

2 Respuestas

2votos

Botxtrem-Solutions Puntos1990

Hola aquí les dejo mi respuesta ya verificada y funcionando:

<?php
 ini_set("default_charset", "UTF-8");
mb_internal_encoding("UTF-8");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$font ='Amperzand.ttf';
$fuente_tamano = 25;
$texto="Es irónico que el amor sea lo más bonito y lo más letal.";

utf8_encode($texto);
$im = imagecreate(400,400);

$fondo=imagecolorallocate ($im, rand(0,255), rand(0,100), rand(0,255));
//Colores
$blanco = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$gris=imagecolorallocate ($im, 160, 160,160);
$negro=imagecolorallocate ($im, 0, 0, 0);
$colorGris = imagecolorallocate($im, 200, 200, 200);
$colorAzul = imagecolorallocate($im, 0, 0, 255);

$lines1 = explode('|', wordwrap(utf8_decode($texto), 28, '|'));

$y=50;

foreach ($lines1 as $line1) {
    {
    $line1=trim($line1);
                    //$line1 = str_pad($line1, 30,"0", STR_PAD_BOTH);
    $marco= ImageTTFBBox ($fuente_tamano, 0, $font, $line1);
    $x = (400 - ($marco[2]-$marco[0])) / 2;
    $y += 30;

    // El texto negro para que lo usaremos como borde
    imagettftext($im, $fuente_tamano, 0, $x + 2 , $y + 1 , $negro, $font, $line1);
    imagettftext($im,$fuente_tamano, 0, $x - 2 , $y - 1 , $negro, $font, $line1);

    // El texto blanco
    imagettftext($im,$fuente_tamano, 0, $x , $y, $blanco, $font, $line1);

    }       
}
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?> 

Saludes

0voto

Peter comentado

Gracias por compartir la solución!

3votos

carlossevi Puntos63580

Puedes utilizar la función imagettfbbox() (Ver documentación y ejemplos: http://php.net/manual/es/function.imagettfbbox.php) para saber cual va a ser la dimensión de la caja del texto. Cuando tengas la dimensión, puedes crear la imagen con el tamaño necesario.

0voto

Botxtrem-Solutions comentado

Hola amigo gracias por tu respuesta y bueno ya funciona bien .

<?php
$font ='Amperzand.ttf';
$fuente_tamano = 25;
$texto="Es irónico que el amor sea lo más bonito y lo más letal.";

utf8_encode($texto);
$im = imagecreate(400,400);

$fondo=imagecolorallocate ($im, rand(0,255), rand(0,100), rand(0,255));
//Colores
$blanco = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$gris=imagecolorallocate ($im, 160, 160,160);
$negro=imagecolorallocate ($im, 0, 0, 0);
$colorGris = imagecolorallocate($im, 200, 200, 200);
$colorAzul = imagecolorallocate($im, 0, 0, 255);

$lines1 = explode('|', wordwrap($texto, 28, '|'));

$y=50;

foreach ($lines1 as $line1) {
    {
    $line1=trim($line1);
                    //$line1 = str_pad($line1, 30,"0", STR_PAD_BOTH);
    $marco= ImageTTFBBox ($fuente_tamano, 0, $font, $line1);
    $x = (400 - ($marco[2]-$marco[0])) / 2;
    $y += 30;

    // El texto negro para que lo usaremos como borde
    imagettftext($im, $fuente_tamano, 0, $x + 2 , $y + 1 , $negro, $font, $line1);
    imagettftext($im,$fuente_tamano, 0, $x - 2 , $y - 1 , $negro, $font, $line1);

    // El texto blanco
    imagettftext($im,$fuente_tamano, 0, $x , $y, $blanco, $font, $line1);

    }       
}
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>

El problema que resulta es que no representa las ñ ni los acentos .

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta