Ce script prend du texte, recherche les URL, les colore et crée une image png. Le problème que j'ai est avec wordwrap. Puisque je dois séparer le texte et le remettre ensemble pour colorier les liens, j'ai du mal à comprendre comment envelopper le texte. Voici le script et une image des résultats.PHP: texte enveloppé éclaté avec imagettftext
// Matches urls
function is_a_url($text) {
$isurl = preg_match("((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", $text) || preg_match("/@(\w+)/", $text) || preg_match("/#(\w+)/", $text);
return $isurl;
}
// Set defaults
$image_width = 500;
$image_height = 110;
$start_x = 5;
$start_y = 20; // initial x/y coords of text
$fontsize = 14;
$font = './font.ttf';
$angle = 0;
$im = imagecreatetruecolor($image_width, $image_height);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 51, 51, 51);
$linkcolor = imagecolorallocate($im, 51, 210, 208);
$red = imagecolorallocate($im, 200, 0, 0);
// Create the box
imagefilledrectangle($im, 0, 0, $image_width, $image_height, $red);
// Get the text
$text="Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem http://somelongurl.com/then-we-make-it-super-long-with-some-more/ Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum http://www.shorturl.com/ Lorem Ipsum";
//split the text on spaces so we can eval each "word"
$string_chunks = explode(' ', $text);
// Takes the split and recombine
foreach ($string_chunks as $chunk) {
//wrap based on image size
if($start_x > $image_width){
$start_x = 5;
$start_y += 20;
}
else {
$image_width = $image_width - 10;
$output .= ($counter % 15 < 1) ? '\r' : '';
}
// get coordinates of bounding box containing text
$coords = imagettfbbox($fontsize, $angle, $font, $chunk);
$end_x = $coords[0] + $coords[4] + 10;
// figure out which color to draw in
$color_to_draw = is_a_url($chunk) ? $linkcolor : $black;
// draw the text chunk
imagettftext($im, $fontsize, $angle, $start_x, $start_y, $color_to_draw, $font, $chunk);
// adjust starting coordinates to the END of the just-drawn text
$start_x += $end_x;
}
// Save the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
alt text http://dl.dropbox.com/u/19973/script.png
Les mots séparés par des espaces sont faciles à diviser en plusieurs lignes. Mais vous devez d'abord comprendre comment vous voulez casser une longue URL. – stillstanding
Oui, briser les URL est le principal problème. Comment pourrais-je m'y prendre? – tim
Êtes-vous à l'aise avec la séparation '/'? Cela ne marchera pas toujours. Supposons que vous ayez 'http: // supercalifragilisticexpialidocious.example.com/un-segment-uri-non-break-long-long'? Cela ne correspondra pas non plus à la règle de séparation '/'. – stillstanding