Cita:
Iniciado por Triby Entonces supongo que ya tienes algún código que has probado y que tal vez solo falta afinarlo para obtener el resultado deseado, qué te parece si lo muestras, nos comentas lo que falta (o falla) y entonces sí podríamos tratar de ayudar.
Tengo algunos códigos con los que estoy ensayando principalmente con Imagick, por ejemplo:
Genera la imágen pero el texto sobrepasa el ancho sin realizar ningún salto de línea.
Código PHP:
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tincidunt velit at justo varius, tincidunt varius magna sollicitudin.";
$image = new Imagick('http://placehold.it/500x500');
$image->cropThumbnailImage(500, 500);
$draw = new ImagickDraw;
$draw->setFontSize(40);
$draw->setFont('OpenSans-Regular.ttf');
$draw->setGravity(Imagick::GRAVITY_CENTER);
$image->annotateImage($draw, 10, 10, 0, $text);
header('Content-Type: image/jpg');
echo $image;
Este está cerca de lo que quiero, adapta el tamaño de la fuente, y agregando a mano algunos saltos "\n" queda en un tamaño aceptable, pero no logro el texto quede centrado, sino que lo muestra alineado a la izquierda.
Código PHP:
<?php
$text = "Lorem ipsum dolor sit amet\n, consectetur adipis\ncing elit. In tincidunt \nvelit at justo varius, \ntincidunt varius magna \nsollicitudin.";
$objImage = new Imagick('http://placehold.it/500x500');
$imgSize = $objImage->getImageGeometry();
$imgWidth = $imgSize['width'];
$imgHeight = $imgSize['height'];
$objText = new ImagickDraw();
$objText->setFillColor( new ImagickPixel('black') );
$objText->setFillAlpha( 0.2 );
$objText->setGravity( Imagick::GRAVITY_NORTHWEST );
$textProperties = array( 'textWidth' => 0 );
$textDesiredWidth = intval( $imgWidth * 0.9 );
$fontSize = 0;
while ($textProperties['textWidth'] <= $textDesiredWidth) {
$objText->setFontSize( $fontSize );
$textProperties = $objImage->queryFontMetrics( $objText, $text );
$fontSize++;
}
$watermarkPosX = intval( ($imgWidth - $textProperties['textWidth']) / 2 );
$watermarkPosY = floor( ($imgHeight - $textProperties['textHeight']) / 2 );
$objImage->annotateImage( $objText, $watermarkPosX, $watermarkPosY, 0, $text );
header( 'Content-Type: image/jpeg' );
echo $objImage;
Este desde línea de comando tengo un resultado cercano, como el código anterior, pero tampoco logro el centrado del texto, y si no fuerzo los saltos de línea con "\n", para textos largos se pierda a partir de la 3ra línea.
Código PHP:
<?php
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tincidunt velit at justo varius, tincidunt varius magna sollicitudin.";
exec("convert sky.jpg -size 460x -background transparent -fill black -pointsize 40 caption:'{$text}' -gravity center -composite result.jpg");
echo "<img src='result.jpg' width='500' height='500'>";
Estos son los intentos más cercanos, pero aún no consigo hacer lo que quiero. Agradecería cualquier ayuda!!
Saludos y muchas gracias!