Your IP : 216.73.216.201


Current Path : /home/balossw/www/temp/common/includes/
Upload File :
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;
}