Embed the image with this image tag:
<img src="http://yoursite.com/latest-blog-post-rss-image.php" alt="http://yoursite.com/blog" border="0" />
Include a link to the front page of your blog to make the title clickable:
<a href="http://yoursite.com/blog"><img src="http://yoursite.com/latest-blog-post-rss-image.php" alt="http://yoursite.com/blog" border="0" /></a>
Here is the code for latest-blog-post-rss-image.php
<?php
//Parse text block for value near search defined by offset and length / end tag
function parse($block,$search,$offset,$length,$endtag="") {
$start = strpos($block,$search) + $offset;
$end = $start + $length;
$value = substr($block, $start, $end - $start );
if ($endtag != "") {
$value = substr($value,0,strpos($value,$endtag)-(strlen($endtag)));
}
if ($start == 0) {
$value = "";
}
return $value;
}
//RSS feed to get title from
$rss = "http://yoursite.com/rss.xml";
//read the RSS feed using cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $rss);
$result = curl_exec ($ch);
curl_close($ch);
//extract the first (and latest blog title)
$title = parse($result,"<item>",0,300,"<link>");
//trim the title and extract html tags
$title = strip_tags($title);
$title = trim($title);
//set image fonts and positioning
$size = 7.5;
$labelsize = 7.5;
$font = 'arialbd.ttf';
$labelfont = 'arial.ttf';
$x = -1;
$y = 10;
$angle = 0;
$label = "Latest blog post: ";
//Get an array of rss title words to facilitate word wrap
$words = explode(" ",$title);
//Force the image to word wrap around this approximate length (pixels)
$labellength = imagettfbbox($labelsize, 0, $labelfont, $label);
$maxlength = 350 - $labellength[4];
$line1length = $labellength;
$line1 = "";
$line2 = "";
foreach ($words as $word) {
if ($line1length[4] < $maxlength) {
$line1 .= $word . " ";
$nextword = $line1 . $word;
$line1length = imagettfbbox($size, 0,$font, $nextword);
} else {$line2 .= $word . " ";}
}
$line1 = trim($line1);
$line2 = trim($line2);
//determine image dimensions based on rss title length and including the label text
$line1length = imagettfbbox($size, 0, $font, $line1);
$line2length = imagettfbbox($size, 0, $font, $line2);
$totallength = $labellength[4] + $line1length[4];
//Set the image height for 1 line or 2 lines
if ($line2 == "") {
$height = 12;
} else $height = 24;
//set canvas dimensions (based on blog post length) and height
$gif = imagecreatetruecolor($totallength+1, $height);
//set background colour to white
$white = imagecolorallocate($gif, 255, 255, 255);
//fill image with white background and set as transparent
imagefill($gif, 0,0, $white);
imagecolortransparent($gif, $white);
//Print rss title onto image if it's not blank for some reason...
if ($title != "") {
//set text colors R,G,B
$text_color = imagecolorallocate($gif, 255, 149, 6);
$label_color = imagecolorallocate($gif, 0, 5, 85);
//Print blog post label into image
ImageTTFText($gif, $labelsize, $angle, $x, $y, $label_color, $labelfont, $label);
//Print blog post line 1 title into image
ImageTTFText($gif, $size, $angle, $x+$labellength[4], $y, $text_color, $font, $line1);
//print link underline
ImageLine($gif, $totallength, $y+1,$labellength[4]-1,$y+1, $text_color );
if ($line2 != "") {
//Print blog post line 2 title into image
ImageTTFText($gif, $size, $angle, $x+1, $y+12, $text_color, $font, $line2);
//print link underline
ImageLine($gif, 0, $y+13,$line2length[4],$y+13, $text_color );
}
}
//output blog post title image
header("Content-type: image/gif");
imagegif($gif);
imagedestroy($gif);
?>
1 comment:
This was incredibly helpful - There are a lot of paid apps out there for RSS in signatures but this should work great!
Post a Comment