• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
render text as image

#1
[eluser]stoefln[/eluser]
is there a convenient way to render text as image (antialiasing) in CI?
i found no helper/lib/whatever for this purpose...

#2
[eluser]xwero[/eluser]
a quick google got me TextToImage function. Check the image library your are working with for more function.

It's best you cache the images instead of rendering it on every page request.

#3
[eluser]stoefln[/eluser]
[quote author="xwero" date="1213037435"]a quick google got me TextToImage function. Check the image library your are working with for more function.

It's best you cache the images instead of rendering it on every page request.[/quote]

yeah caching is exactly the point. would be great if there would be a library for generating cached text-images out of a config array.
TYPO3 can do this out of the box, wondering.., its a feature which is quite often required IMO...

#4
[eluser]xwero[/eluser]
Instead of caching you can create static images when you change or add the text. Caching is good but static is better.

#5
[eluser]stoefln[/eluser]
[quote author="xwero" date="1213055373"]Instead of caching you can create static images when you change or add the text. Caching is good but static is better.[/quote]

where is the difference between caching and static images?

#6
[eluser]xwero[/eluser]
Caching works with time intervals, most of the time, which renders the images without need. A static image created when the text is added or changed only changes when it's necessary.

#7
[eluser]stoefln[/eluser]
[quote author="xwero" date="1213067802"]Caching works with time intervals, most of the time, which renders the images without need. A static image created when the text is added or changed only changes when it's necessary.[/quote]

i think i would need another caching algorithm in both cases: i think it should be able to check if there has been any change in one of the parameters (font, fontsize,..). cause i dont want to delete all files manually if i have to change a rendering-property.
so my aproach would be to create a checksum over the configuration array and use this checksum as filename...

#8
[eluser]xwero[/eluser]
It looks like a well thought out approach

#9
[eluser]stoefln[/eluser]
So, finally heres my text2image_helper.php, hope you like i:

Code:
<?php

/**
*    Text To Image Function
*
*    PHP versions 4 and 5
*
*    @author     Stephan Petzl <spetzl@gmx.at>
*    @copyright  2005 &copy; Stephan Petzl
*    @license    non, just use the file as you like, but please dont throw this sentence away
*    @link       http://ra.synapsick.net
*/

/**
*    Text to image Function
*
*    Convert text to a image
*
*    @param string $text Text to be converted
*    @param string $configArray Optional configuration array allows you to set: 'background-color', 'color', 'font-size', 'font-file', 'params'
*    @param int $filepath Directory where generated images are stored
*    @return void
*/
function text2image($text,$configArray=array(),$filepath='public/images/generated')
{
    if(trim($text) == "")
        return "";
    $conf = array();
    $conf['background-color'] = isset($configArray['background-color']) ? $configArray['background-color'] : '#FFFFFF';
    $conf['color']            = isset($configArray['color'])            ? $configArray['color'] : '#404040';
    $conf['font-size']        = isset($configArray['font-size'])        ? $configArray['font-size'] : '19';
    $conf['font-file']        = isset($configArray['font-file'])        ? $configArray['font-file'] : APPPATH.'fonts/HelveticaNeue-Condensed.otf';
    $conf['params']           = isset($configArray['params'])           ? $configArray['params'] : '';
    
    // calculate a hash out of the configuration array-> image is only generated if its not found in the filepath
    $str = $text;
    foreach($conf as $key => $val){
        $str .= $key."=".$val;
    }
    $hash = md5($str);
    $imagepath = $filepath.'/'.$hash.'.gif';
    if(!file_exists($imagepath)){
        $data = imagettfbbox($conf['font-size'], 0, $conf['font-file'], $text);
        $x = 0 - $data[6];
        $y = 0 - $data[7]-$data[3];
        //print_r($data);
        
        $y *= 1.1;  //dunno why - but without this line the area will be a bit too small in hight
        //echo $y;
        $res = imagecreate($data[2]*1.05, 2*$data[3] + $y);
        $r = hexdec(substr($conf['background-color'],1,2));
        $g = hexdec(substr($conf['background-color'],3,2));
        $b = hexdec(substr($conf['background-color'],5,2));
        $backgroundcolor = imagecolorallocate($res,$r,$g, $b);
        $r = hexdec(substr($conf['color'],1,2));
        $g = hexdec(substr($conf['color'],3,2));
        $b = hexdec(substr($conf['color'],5,2));
        
        $textcolor = imagecolorallocate($res,$r, $g, $b);
        imagettftext($res, $conf['font-size'], 0, 0, $conf['font-size'], $textcolor, $conf['font-file'], $text);
        
        imagegif($res, $imagepath);
    }
    return '<img src="'.$imagepath.'" border="0" alt="'.$text.'" '.$conf['params'].'/>';
    
}
?&gt;

#10
[eluser]Ajeesh[/eluser]
i used this code, but the generated image had 1024 width and height 15 and the enterd text showing in a single line. Then i gave breaks bt its not working.


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2019 MyBB Group.