| Current Path : /home/balossw/www/temp/common/includes/ |
| Current File : /home/balossw/www/temp/common/includes/imaging.inc.php |
<?php
/*---------------------------------------------------------------------------
File name ............ common/includes/imaging.inc.php
Author ............... Antoine Lemoine
Creation date ........ 07.09.2009
Modification date .... 29.07.2010
---------------------------------------------------------------------------*/
function getTextImage($data)
{
global $global;
$data['function'] = 'createTextImage';
return $global->path('common/image.php?b64='.
urlencode(
base64_encode(
serialize(
$data
)
)
)
);
}
function htmlToRGB($color)
{
if (substr($color,0,1)=='#') $color=substr($color,1,6);
$r = hexdec(substr($color,0,2));
$g = hexdec(substr($color,2,2));
$b = hexdec(substr($color,4,2));
$rgb = array(
'r' => $r,
'g' => $g,
'b' => $b,
'red' => $r,
'green' => $g,
'blue' => $b,
);
return $rgb;
}
function string2hex($string) {
$hex = '';
for ($i=0, $n=strlen($string); $i<$n; $i++) {
$char = substr($string,$i,1);
$ord = ord($char);
$hex .= ($ord<16 ? '0' : '').dechex($ord);
}
return substr($hex,0,-1);
}
function createTextImage($data, $cache_activated=false, $output_filename=null)
{
global $global;
$filename = $global->realpath('var/tmp/imgtxt-'.md5(serialize($data)).'.png');
if (false && $cache_activated && file_exists($filename) && $fp = fopen($filename,'r')) {
$file_content = fread($fp,filesize($filename));
fclose($fp);
if (isset($output_filename)) {
file_puts_content($output_filename,$file_content);
return $output_filename;
} else {
header('Content-type: image/png');
echo $file_content;
exit;
}
} else {
if (!isset($data['strings'])) $data['strings'] = array(array());
$w = 0;
$h = 0;
$baseline = 0;
$default_color = isset($data['color']) ? $data['color'] : '000000';
$default_size = isset($data['size']) ? $data['size'] : 12;
$default_text = isset($data['text']) ? $data['text'] : 'test';
$default_font = isset($data['font']) ? $data['font'] : 'tuffy';
$padding_top = isset($data['padding-top']) ? $data['padding-top'] : (isset($data['padding']) ? $data['padding'] : 0);
$padding_left = isset($data['padding-left']) ? $data['padding-left'] : (isset($data['padding']) ? $data['padding'] : 0);
$padding_right = isset($data['padding-right']) ? $data['padding-right'] : (isset($data['padding']) ? $data['padding'] : 0);
$padding_bottom = isset($data['padding-bottom']) ? $data['padding-bottom'] : (isset($data['padding']) ? $data['padding'] : 0);
foreach ($data['strings'] as $key => $string) {
$string['size'] = isset($string['size']) ? $string['size'] : $default_size;
$string['color'] = isset($string['color']) ? $string['color'] : $default_color;
$string['text'] = isset($string['text']) ? $string['text'] : $default_text;
$string['font'] = $global->realpath('lib/fonts/'.(isset($string['font']) ? $string['font'] : $default_font).'.ttf');
$string['rvb'] = htmlToRGB($string['color']);
$bsize = imageTtfBBox($string['size'],0,$string['font'],$string['text']);
$bsize1 = imageTtfBBox($string['size'],0,$string['font'],'A');
$bsize2 = imageTtfBBox($string['size'],0,$string['font'],'a');
$bsize3 = imageTtfBBox($string['size'],0,$string['font'],'p');
$string['baseline'] = abs($bsize1[1]-$bsize1[7]);
$string['h'] = $string['baseline']+abs($bsize3[1]-$bsize3[7])-abs($bsize2[1]-$bsize2[7]);
$string['w'] = abs($bsize[0]-$bsize[2]);
$w += $string['w'];
$h = $string['h']>$h ? $string['h'] : $h;
$baseline = $string['baseline']>$baseline ? $string['baseline'] : $baseline;
$data['strings'][$key] = $string;
}
$w += $padding_left+$padding_right;
$h += $padding_top+$padding_bottom;
$image = imageCreateTrueColor($w,$h);
if (isset($data['background']) && $data['background']=='none') {
imageAlphaBlending($image,false);
$transparent = imageColorAllocateAlpha($image,0,0,0,127);
imageFill($image,0,0,$transparent);
imageSaveAlpha($image,true);
imageAlphaBlending($image,true);
} else {
$bgcolor = htmlToRGB(isset($data['background']) ? $data['background'] : 'FFFFFF');
$background = imageColorAllocate($image,$bgcolor['r'],$bgcolor['g'],$bgcolor['b']);
imageFilledRectangle($image,0,0,$w,$h,$background);
}
$dx = $padding_left;
$dy = $padding_top+$baseline;
foreach ($data['strings'] as $string) {
$color = imageColorAllocate($image,$string['rvb']['r'],$string['rvb']['g'],$string['rvb']['b']);
imageTtfText($image,$string['size'],0,$dx,$dy,$color,$string['font'],$string['text']);
$dx += $string['w'];
}
if ($cache_activated) imagePng($image,$filename);
if (isset($output_filename)) {
imagePng($image,$output_filename);
imageDestroy($image);
return $output_filename;
} else {
header('Content-type: image/png');
imagePng($image);
imageDestroy($image);
exit;
}
}
}
function buildThumbnailFilename($root, $filename, $thumb_width, $thumb_height, $new_extension=null) {
$root = addEndingSlash($root);
$infos = pathinfo($filename);
$infos['extension'] = strtolower($infos['extension']);
if (in_array($infos['extension'],array('png','jpg','jpeg','gif'))) {
$stat = stat($root.$filename);
$filename_without_extension = substr($infos['basename'],0,strlen($infos['basename'])-strlen($infos['extension'])-1);
return (!in_array($infos['dirname'],array('','.')) ? $infos['dirname'].'/' : '').$filename_without_extension
.'~w'.$thumb_width.'~h'.$thumb_height.'~size-'.$stat['size'].'b~mtime-'.$stat['mtime'].'.'
.(isset($new_extension) ? $new_extension : ($infos['extension']=='gif' ? 'png' : $infos['extension']));
}
else return null;
}
function getThumbnailHTML($filename, $images_path, $thumbnails_path, $thumb_width, $thumb_height, $alt_value) {
$thumbnail_image_path = getThumbnailPath($filename,$images_path,$thumbnails_path,$thumb_width,$thumb_height);
if ($thumbnail_image_path!='' && file_exists($thumbnail_image_path)) {
$image_size = @getimagesize($thumbnail_image_path);
$width = $image_size[0];
$height = $image_size[1];
return "<img class=\"thumbnail\" src=\"".$thumbnail_image_path."\""
. " style=\"width:".$width."px;height:".$height."px;\" alt=\"".htmlentities($alt_value)."\" />";
}
return '';
}
function getThumbnailPath($filename, $images_path, $thumbnails_path, $thumb_width, $thumb_height) {
$original_image_path = buildPath($images_path,$filename);
if ($filename!='' && file_exists($original_image_path)) {
$stat = stat($original_image_path);
$infos = pathinfo($filename);
$thumbnail_filename = buildThumbnailFilename($images_path,$filename,$thumb_width,$thumb_height);
$thumbnail_image_path = buildPath($thumbnails_path,$thumbnail_filename);
mkdirs(dirname($thumbnail_image_path),0775);
if (!file_exists($thumbnail_image_path)) {
createThumbnail($images_path,$filename,$thumbnails_path,$thumbnail_filename,
$thumb_width,$thumb_height,$conserve_proportions=true,$fixed_size=false,$conserve_extension=true);
}
return $thumbnail_image_path;
}
return '';
}
function createThumbnail($original_path, $original_filename, $thumbnail_path, $thumbnail_filename,
$thumb_width=150, $thumb_height=150, $conserve_proportions=false, $fixed_size=false, $conserve_extension=true, $crop=false)
{
return createThumbnail2($original_path,$original_filename,$thumbnail_path,$thumbnail_filename,$thumb_width,$thumb_height,array(
'conserve_proportions' => $conserve_proportions,
'fixed_size' => $fixed_size,
'conserve_extension' => $conserve_extension,
'crop' => $crop,
));
}
function createThumbnail2($original_path, $original_filename, $thumbnail_path, $thumbnail_filename, $thumb_width=150, $thumb_height=150, $options=array()) {
$conserve_proportions = isset($options['conserve_proportions']) ? $options['conserve_proportions'] : false;
$fixed_size = isset($options['fixed_size']) ? $options['fixed_size'] : false;
$conserve_extension = isset($options['conserve_extension']) ? $options['conserve_extension'] : true;
$crop = isset($options['crop']) ? $options['crop'] : false;
$bgcolor = isset($options['bgcolor']) ? $options['bgcolor'] : '#ffffff';
$filename = buildPath($original_path,$original_filename);
$infos = pathinfo($original_filename);
$extension = strtolower($infos['extension']);
if ($extension=='jpeg') $extension = 'jpg';
switch ($extension) {
case 'png' : $image = @imageCreateFromPNG($filename);break;
case 'jpg' : $image = @imageCreateFromJPEG($filename);break;
case 'gif' : $image = @imageCreateFromGIF($filename);break;
}
if (!isset($image) || !$image) return false;
$thumbnail_full_path = buildPath($thumbnail_path,$thumbnail_filename);
mkdirs($path=dirname($thumbnail_full_path),$chmod=0755);
$width = imagesx($image);
$height = imagesy($image);
$width_per = $thumb_width / $width;
$height_per = $thumb_height / $height;
$src_x = $src_y = $dest_x = $dest_y = 0;
if (!$fixed_size) {
if ($conserve_proportions) {
if ($width_per<=$height_per) $thumb_height = intval($height*$width_per);
else $thumb_width = intval($width*$height_per);
} else {
if ($width_per<=$height_per) $src_x = floor(($width-intval($height * $thumb_width / $thumb_height))/2);
else $src_y = floor(($height-intval($width * $thumb_height / $thumb_width))/2);
}
} else {
if ($crop) {
if ($width_per>=$height_per) $dest_y = floor(($thumb_height - intval($height * $width_per))/2);
else $dest_x = floor(($thumb_width - intval($width * $height_per))/2);
} else {
if ($width_per<=$height_per) $dest_y = floor(($thumb_height - intval($height * $width_per))/2);
else $dest_x = floor(($thumb_width - intval($width * $height_per))/2);
}
}
$thumbnail_image = imageCreateTrueColor($thumb_width,$thumb_height);
if ($bgcolor!='none') {
$bgcolor = htmlToRGB($bgcolor);
$background = imageColorAllocate($thumbnail_image,$bgcolor['r'],$bgcolor['g'],$bgcolor['b']);
imageFilledRectangle($thumbnail_image,0,0,$thumb_width,$thumb_height,$background);
} else {
imageAlphaBlending($thumbnail_image,false);
$transparent = imageColorAllocateAlpha($thumbnail_image,0,0,0,127);
imageFill($thumbnail_image,0,0,$transparent);
imageSaveAlpha($thumbnail_image,true);
imageAlphaBlending($thumbnail_image,true);
}
imageCopyResampled($thumbnail_image,$image,$dest_x,$dest_y,$src_x,$src_y,
$thumb_width-2*$dest_x,$thumb_height-2*$dest_y,$width-2*$src_x,$height-2*$src_y);
$infos = pathinfo($thumbnail_filename);
$thumbnail_extension = strtolower($infos['extension']);
if ($thumbnail_extension=='jpeg') $thumbnail_extension = 'jpg';
switch ($thumbnail_extension) {
case 'png' : imagePNG($thumbnail_image,$thumbnail_full_path);break;
case 'jpg' : imageJPEG($thumbnail_image,$thumbnail_full_path,90);break;
}
imageDestroy($image);
imageDestroy($thumbnail_image);
return true;
}