(Jerome Gamez) http://jerome-gamez.de/
// MOD Description: Adds the possibilty to create dynamic graphical text
// with replacement tags
//
// MOD Version: 2.0
require_once (PHPWCMS_ROOT.'/include/inc_module/mod_graphical_text/inc_lib/functions.general.inc.php');
// Path for caching purposes
define('CACHE_PREFIX', PHPWCMS_ROOT.'/'.$phpwcms["content_path"].'gt/' );
// Path for display
define('DISPLAY_PREFIX', $phpwcms["content_path"].'gt/' );
function hex2dec($hex)
{
// Converts HEX-values to RGB-arrays
$color = str_replace('#', '', $hex);
$ret = array(
'r' => hexdec(substr($color, 0, 2)),
'g' => hexdec(substr($color, 2, 2)),
'b' => hexdec(substr($color, 4, 2))
);
return $ret;
}
function create_picture($cachefile, $font, $text, $antialiasing, $size, $fgcolor, $fgtransparency, $bgcolor, $bgtransparency, $line_width, $format, $x=0, $y=0, $h=5, $rotation='default')
{
// Creates a picture in the cache folder
$fgcolor = hex2dec($fgcolor);
$bgcolor = hex2dec($bgcolor);
$_fval_x = intval($x);
$_fval_y = intval($y);
$_fval_h = intval($h);
// Font properties
$fontfile = PHPWCMS_ROOT.'/include/inc_module/mod_graphical_text/inc_fonts/'.$font;
$bbox = imagettfbbox($size, 0, $fontfile, $text);
$font_left=($bbox[0]>$bbox[6])?$bbox[6]:$bbox[0];
$font_right=($bbox[2]>$bbox[4])?$bbox[2]:$bbox[4];
// Check height with letters like 'pbl' etc. to center the text correctly
$bbox = imagettfbbox($size, 0, $fontfile, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?");
$font_top=($bbox[1]>$bbox[7])?$bbox[7]:$bbox[1];
$font_bottom=($bbox[3]>$bbox[5])?$bbox[3]:$bbox[5];
$font_width=$font_right-$font_left;
$font_height=$font_bottom-$font_top;
$im = imagecreate($font_width + 5, $font_height + $_fval_h);
if (intval($bgtransparency) == 1 && $format != "jpg") {
$background = imagecolorallocatealpha($im, $bgcolor['r'], $bgcolor['g'], $bgcolor['b'], 127);
} else{
$background = imagecolorallocate($im, $bgcolor['r'], $bgcolor['g'], $bgcolor['b']);
}
if (intval($fgtransparency) == 1 && $format != "jpg") {
$color = imagecolorallocatealpha($im, $fgcolor['r'], $fgcolor['g'], $fgcolor['b'], 127);
} else {
$color = imagecolorallocate($im, $fgcolor['r'], $fgcolor['g'], $fgcolor['b']);
}
// Check antialiasing
if (intval($antialiasing) == 0) $color = "-".$color;
$im_width = imagesx($im);
$im_height = imagesy($im);
$font_start_x = (($im_width - $font_width)/2) + $_fval_x;
$font_start_y = ($im_height/2) + ($size/2) + $_fval_y;
if( ! seems_utf8($text) ) {
$text = utf8_encode($text);
}
imagettftext($im, $size, 0, $font_start_x, $font_start_y, $color, $fontfile, $text);
// Create underline
for ($i = 0;$i < $line_width; $i++)
{
imageline($im, $font_start_x, $font_height+$i, $font_start_x+$font_width, $font_height+$i, $color);
}
// rotate image
if($rotation == 'hcw' || $rotation == 'cw' || $rotation == 'ccw') {
$im = rotateImage($im, $rotation);
}
// Create cached image
switch ($format)
{
case "jpg":
imagejpeg($im, $cachefile, 100);
break;
case "gif":
imagegif($im, $cachefile, 100);
break;
case "png":
imagepng($im, $cachefile, 9);
break;
}
imagedestroy($im);
}
function show_picture ($font, $text, $antialiasing, $size, $fgcolor, $fgtransparency, $bgcolor, $bgtransparency, $line_width, $format, $x=0, $y=0, $h=5, $rotation='default')
{
// This function checks if the image with the above parameters has already been created and cached
// If so, it creates a direct image link to the cached file (this should solve sooner problems with
// some older browsers
$md5 = md5($font.$text.$antialiasing.$size.$fgcolor.$fgtransparency.$bgcolor.$bgtransparency.$line_width.$format.$x.$y.$h.$rotation);
$cachefile = CACHE_PREFIX . $md5 . '.' . $format;
if(!file_exists($cachefile)) {
// Call the fontizer-script to generate the image. This will happen only one time
create_picture($cachefile, $font, $text, $antialiasing, $size, $fgcolor, $fgtransparency, $bgcolor, $bgtransparency, $line_width, $format, $x, $y, $h, $rotation);
}
$displayfile = DISPLAY_PREFIX . $md5 . '.' .$format;
$text = html_specialchars($text);
$display_image_HxW = @getimagesize($cachefile);
if($display_image_HxW) {
$gt_replace = '';
} else {
$gt_replace .= $text;
}
return $gt_replace;
}
function get_gt_by_style ($matches) {
// This functions get the image per style {GT:style}Text{/GT}
$style_name = $matches[1];
$text = $matches[2];
global $gt;
if(empty($gt)) {
$gt = gt2array($GLOBALS['db']);
}
$a_href_before = '';
$a_href_end = '';
$result = $text;
$style_name = '"'.$style_name.'"';
$style = isset($gt["styles_name"][$style_name]) ? $gt["styles_name"][$style_name] : false;
if (!empty($style)) {
$font = $gt["fonts_id"][$style["font"]]["filename"];
$fgcolor = $gt["colors_id"][$style["fgcolor"]]["value"];
$bgcolor = $gt["colors_id"][$style["bgcolor"]]["value"];
if(is_file(PHPWCMS_ROOT.'/include/inc_module/mod_graphical_text/inc_fonts/'.$font)) {
preg_match('/(]*?>)(.*?)(<\/a>)/i', $text, $aparts);
if(is_array($aparts) && count($aparts)) {
$a_href_before = $aparts[1];
$text = $aparts[2];
$a_href_end = $aparts[3];
}
$text = stripslashes($text);
$text = str_replace('[br]', "\n", $text);
$text = str_replace(array('
=');
switch($direction) {
case 'cw': $degrees = 270;
break;
case 'ccw': $degrees = 90;
break;
case 'hcw': return $is_php51 ? imagerotate($image, 180, 0, -1) : imagerotate($image, 180, 0);
break;
default: return $image;
}
$width = imagesx($image);
$height = imagesy($image);
$side = $width > $height ? $width : $height;
$imageSquare = imagecreatetruecolor($side, $side);
imagecopy($imageSquare, $image, 0, 0, 0, 0, $width, $height);
imagedestroy($image);
$imageSquare = $is_php51 ? imagerotate($imageSquare, $degrees, 0, -1) : imagerotate($imageSquare, $degrees, 0);
$image = imagecreatetruecolor($height, $width);
if($direction == 'cw') {
$x = $height > $width ? 0 : $side - $height;
$y = 0;
} elseif($direction == 'ccw') {
$x = 0;
$y = $height < $width ? 0 : $side - $width;
}
imagecopy($image, $imageSquare, 0, 0, $x, $y, $height, $width);
imagedestroy($imageSquare);
return $image;
}
?>