<?php

/*

 * @package Joomla 1.5

 * @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.

 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php

 *

 * @component Phoca Gallery

 * @copyright Copyright (C) Jan Pavelka www.phoca.cz

 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL

 */

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.filesystem.folder' ); 

jimport( 'joomla.filesystem.file' );

phocagalleryimport('phocagallery.path.path');

phocagalleryimport('phocagallery.file.file');

phocagalleryimport('phocagallery.image.image');

phocagalleryimport('phocagallery.utils.utils');



class PhocaGalleryImageBgImage

{

	function createBgImage($data, &$errorMsg) {

	

		$params 		= JComponentHelper::getParams('com_phocagallery') ;

		$jfile_thumbs	= $params->get( 'jfile_thumbs', 1 );

		$jpeg_quality	= $params->get( 'jpeg_quality', 85 );

		$jpeg_quality	= PhocaGalleryImage::getJpegQuality($jpeg_quality);

		$formatIcon		= PhocaGalleryImage::getFormatIcon();

		$path			= PhocaGalleryPath::getPath();

		

		$fileIn 	= $fileOut = $path->image_abs_front. $data['image'] .'.'. $formatIcon;

	

		if ($fileIn !== '' && JFile::exists($fileIn)) {

		

			$memory 			= 8;

			$memoryLimitChanged = 0;

			

			$memory = (int)ini_get( 'memory_limit' );

			if ($memory == 0) {

				$memory = 8;

			}

			

			// Try to increase memory

			if ($memory < 50) {

				ini_set('memory_limit', '50M');

				$memoryLimitChanged = 1;

			}

			

			$imageWidth 			= $data['iw'];

			$imageHeight			= $data['ih'];

			$completeImageWidth 	= $imageWidth + 18;

			$completeImageHeight	= $imageHeight + 18;



			$completeImageBackground	= $data['sbgc'];

			$retangleColor				= $data['ibgc'];

			$borderColor				= $data['ibrdc'];

			$shadowColor				= $data['iec'];

			$effect						= $data['ie'];// shadow or glow



			$imgX	= 6; $imgWX = $imageWidth + 5 + $imgX;// Image Width + space (padding) + Start Position

			$imgY	= 6; $imgHY = $imageHeight + 5 + $imgY;

			$brdX 	= $imgX - 1; $brdWX = $imgWX + 1;

			$brdY	= $imgY - 1; $brdHY = $imgHY + 1;

			

			// Crate an image

			$img 	= @imagecreatetruecolor($completeImageWidth, $completeImageHeight);

			if (!$img) {

				$errorMsg = 'ErrorNoImageCreateTruecolor';

				return false;

			}

			

			if ($completeImageBackground == '') {

				switch($formatIcon) {

					case 'jpg':

					case 'jpeg':

					case 'gif':

						$completeImageBackground = '#ffffff';

					break;

					case 'png':

						@imagealphablending($img,false);

						imagefilledrectangle($img,0,0,$completeImageWidth,$completeImageHeight,imagecolorallocatealpha($img,255,255,255,127));

						@imagealphablending($img,true);

					break;

				}

			} else {

				$bGClr	= PhocaGalleryUtils::htmlToRgb($completeImageBackground);

				imagefilledrectangle($img, 0, 0, $completeImageWidth, $completeImageHeight, imagecolorallocate($img, $bGClr[0], $bGClr[1], $bGClr[2]));

			}

			

			// Create Retangle

			if ($retangleColor != '') {

				$rtgClr		= PhocaGalleryUtils::htmlToRgb($retangleColor);

				$retangle 	= imagecolorallocate($img, $rtgClr[0], $rtgClr[1], $rtgClr[2]);

			}

			// Create Border

			if ($borderColor != '') {

				$brdClr		= PhocaGalleryUtils::htmlToRgb($borderColor);

				$border 	= imagecolorallocate($img, $brdClr[0], $brdClr[1], $brdClr[2]);

			}



			// Effect (shadow,glow)

			if ((int)$effect > 0)

			if ($shadowColor != '') {

				$shdClr	= PhocaGalleryUtils::htmlToRgb($shadowColor);

			

				if ((int)$effect == 3) {

					$shdX = $brdX  - 1;

					$shdY = $brdY  - 1;

					$effectArray = array(55,70,85,100,115);

				} else if ((int)$effect == 2) {

					$shdX = $brdX  + 3;

					$shdY = $brdY  + 3;

					$effectArray = array(50, 70, 90, 110);

				} else {

					$shdX = $brdX  + 3;

					$shdY = $brdY  + 3;

					$effectArray = array(0,0,0,0);

				}

				$shdWX 	= $brdWX + 1;

				$shdHY	= $brdHY + 1;

				

				

				foreach($effectArray as $key => $value) {

					$effectImg = @imagecolorallocatealpha($img, $shdClr[0], $shdClr[1], $shdClr[2],$value);

					if (!$effectImg) {

						$errorMsg = 'ErrorNoImageColorAllocateAlpha';

						return false;

					}

					imagerectangle($img, $shdX, $shdY, $shdWX, $shdHY, $effectImg);

				

					if ((int)$effect == 3) {

						$shdX--;

						$shdY--;

						

					} else if ((int)$effect == 2) {

						$shdX++;

						$shdY++;

						

					} else {

						//$shdX++;

						//$shdY++;

					}

					

					$shdWX++;

					$shdHY++;

					

				}

			}

				

			// Write Rectangle over the shadow

			if ($retangleColor != '') {

				imagefilledrectangle($img, $imgX, $imgY, $imgWX, $imgHY, $retangle);

			}

			if ($borderColor != '') {

				imagerectangle($img, $brdX, $brdY, $brdWX, $brdHY, $border);

			}

		

			

			switch($formatIcon) {

				case 'jpg':

				case 'jpeg':

					if (!function_exists('ImageJPEG')) {

						$errorMsg = 'ErrorNoJPGFunction';

						return false;

					}



					if ($jfile_thumbs == 1) {

						ob_start();

						if (!@ImageJPEG($img, NULL, $jpeg_quality)) {

							ob_end_clean();

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

						$imgJPEGToWrite = ob_get_contents();

						ob_end_clean();

						

						if(!JFile::write( $fileOut, $imgJPEGToWrite)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					} else {

						if (!@ImageJPEG($img, $fileOut, $jpeg_quality)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					}

				break;

				

				case 'png' :

					if (!function_exists('ImagePNG')) {

						$errorMsg = 'ErrorNoPNGFunction';

						return false;

					}

					@imagesavealpha($img, true);

					if ($jfile_thumbs == 1) {

						ob_start();

						if (!@ImagePNG($img, NULL)) {

							ob_end_clean();

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

						$imgPNGToWrite = ob_get_contents();

						ob_end_clean();

						

						if(!JFile::write( $fileOut, $imgPNGToWrite)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					} else {

						if (!@ImagePNG($img, $fileOut)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					}

				break;

				

				case 'gif' :

					if (!function_exists('ImageGIF')) {

						$errorMsg = 'ErrorNoGIFFunction';

						return false;

					}

					

					if ($jfile_thumbs == 1) {

						ob_start();

						if (!@ImageGIF($img, NULL)) {

							ob_end_clean();

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

						$imgGIFToWrite = ob_get_contents();

						ob_end_clean();

						

						if(!JFile::write( $fileOut, $imgGIFToWrite)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					} else {

						if (!@ImageGIF($img, $fileOut)) {

							$errorMsg = 'ErrorWriteFile';

							return false;

						}

					}

				break;		

				

				Default:

					$errorMsg =  'ErrorNotSupportedImage';

					return false;

				break;

			}

			

			// free memory

			ImageDestroy($img);// Original

	            

			if ($memoryLimitChanged == 1) {

				$memoryString = $memory . 'M';

				ini_set('memory_limit', $memoryString);

			}

	        

			return true; // Success

		}

		

		$errorMsg = 'Error2';

		return false;

	}

}

?>