Create additional Thumbnail

Phoca Gallery - image gallery extension
pppp666
Phoca Newbie
Phoca Newbie
Posts: 2
Joined: 27 Aug 2010, 11:42

Create additional Thumbnail

Post by pppp666 »

Hallo,

ich möchte gerne zusätzliche Thumbnails erstellen lassen, um diese Definierte Größe in Beiträge einzubinden.
Das einbinden an sich klappt auch schon, mit dem dateinamen: phoca_thumb_f_'variable'.jpg wenn ich die datein manuell erstelle und in den Thumbs ordner hochlade.

Ich finde allerdings keine Datei wo die Thums generiert werden, ansonsten bräuchte ich dort ja nur den Code für phoca_thumb_l_'variable'.jpg kopieren & ändern.

Würde mich freuen wenn mir jemand helfen oder Tipps geben könnte.

Grüße Rouven

*************************************************************************************************************************************************

Hi,

I want to make create additional thumbnails to include this size in Defined contributions.
The embed itself works already, with the filenames: phoca_thumb_f_'variable '. Jpg when I create the files manually and in the Thumbs folder upload.

However, I find no file where the Thums be generated, otherwise I would need to change there, so only the code for phoca_thumb_l_'variable '. Jpg copy &.

I want to create a fourth size.

Would be glad if could someone help me or give tips.

Greetings Rouven
User avatar
Jan
Phoca Hero
Phoca Hero
Posts: 49299
Joined: 10 Nov 2007, 18:23
Location: Czech Republic
Contact:

Re: Create additional Thumbnail

Post by Jan »

Hi, this needs to be customized in the code, you should see libraries folder in administration, you can find there classes for image and imagemagic (these are producing the thumbnails)

Jan
If you find Phoca extensions useful, please support the project
pppp666
Phoca Newbie
Phoca Newbie
Posts: 2
Joined: 27 Aug 2010, 11:42

Re: Create additional Thumbnail

Post by pppp666 »

Sorry but my English is not so good. ;-)

i have edited the imagemagic.php but phoca is not creating the phoca_thumb_f_xxxx.jpg

my additional Thumbnail is "front" / phoca_thumb_f_ with size 300x200px

heres my code:

Code: Select all

<?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.render.renderprocess');

phocagalleryimport('phocagallery.file.file');

phocagalleryimport('phocagallery.image.image');



class PhocaGalleryImageMagic

{

	/**

	* need GD library (first PHP line WIN: dl("php_gd.dll"); UNIX: dl("gd.so");

	* www.boutell.com/gd/

	* interval.cz/clanky/php-skript-pro-generovani-galerie-obrazku-2/

	* cz.php.net/imagecopyresampled

	* www.linuxsoft.cz/sw_detail.php?id_item=871

	* www.webtip.cz/art/wt_tech_php/liquid_ir.html

	* php.vrana.cz/zmensovani-obrazku.php

	* diskuse.jakpsatweb.cz/

	*

	* @param string $fileIn Vstupni soubor (mel by existovat)

	* @param string $fileOut Vystupni soubor, null ho jenom zobrazi (taky kdyz nema pravo se zapsat :)

	* @param int $width Vysledna sirka (maximalni)

	* @param int $height Vysledna vyska (maximalni)

	* @param bool $crop Orez (true, obrazek bude presne tak velky), jinak jenom Resample (udane maximalni rozmery)

	* @param int $typeOut IMAGETYPE_type vystupniho obrazku

	* @return bool Chyba kdyz vrati false

	*/

	function imageMagic($fileIn, $fileOut = null, $width = null, $height = null, $crop = null, $typeOut = null, $watermarkParams = array(), $frontUpload = 0, &$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);



		$fileWatermark = '';

		

		// While front upload we don't display the process page

		if ($frontUpload == 0) {

			$stopText = PhocaGalleryRenderProcess::displayStopThumbnailsCreating();

			echo $stopText;

		}

		// Memory - - - - - - - -

		$memory = 8;

		$memoryLimitChanged = 0;

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

		if ($memory == 0) {

			$memory = 8;

		}

		// - - - - - - - - - - -



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

			

			// array of width, height, IMAGETYPE, "height=x width=x" (string)

	        list($w, $h, $type) = GetImageSize($fileIn);

			

			if ($w > 0 && $h > 0) {// we got the info from GetImageSize



		        // size of the image

		        if ($width == null || $width == 0) { // no width added

		            $width = $w;

		        }

				else if ($height == null || $height == 0) { // no height, adding the same as width

		            $height = $width;

		        }

				if ($height == null || $height == 0) { // no height, no width

		            $height = $h;

		        }

				

		        // miniaturizing

		        if (!$crop) { // new size - nw, nh (new width/height)

		            $scale = (($width / $w) < ($height / $h)) ? ($width / $w) : ($height / $h); // smaller rate

		            $src = array(0,0, $w, $h);

		            $dst = array(0,0, floor($w*$scale), floor($h*$scale));

		        }

		        else { // will be cropped

		            $scale = (($width / $w) > ($height / $h)) ? ($width / $w) : ($height / $h); // greater rate

		            $newW = $width/$scale;    // check the size of in file

		            $newH = $height/$scale;



		            // which side is larger (rounding error)

		            if (($w - $newW) > ($h - $newH)) {

		                $src = array(floor(($w - $newW)/2), 0, floor($newW), $h);

		            }

		            else {

		                $src = array(0, floor(($h - $newH)/2), $w, floor($newH));

		            }



		            $dst = array(0,0, floor($width), floor($height));

		        }

				

				// Watermark - - - - - - - - - - -

				if (!empty($watermarkParams) && ($watermarkParams['create'] == 1 || $watermarkParams['create'] == 2)) {

				

					$thumbnailSmall		= false;

					$thumbnailMedium	= false;

					$thumbnailLarge		= false;
					
					$thumbnailFront		= false;

					

					$thumbnailMedium	= preg_match("/phoca_thumb_m_/i", $fileOut);

					$thumbnailLarge 	= preg_match("/phoca_thumb_l_/i", $fileOut);
					$thumbnailFront 	= preg_match("/phoca_thumb_f_/i", $fileOut);

					

					$path				= PhocaGalleryPath::getPath();

					$fileName 			= PhocaGalleryFile::getTitleFromFile($fileIn, 1);

					

					// Which Watermark will be used

					// If watermark is in current directory use it else use default

					$fileWatermarkMedium  	= str_replace($fileName, 'watermark-medium.png', $fileIn);

					$fileWatermarkLarge  	= str_replace($fileName, 'watermark-large.png', $fileIn);

					clearstatcache();



					// Which Watermark will be used

					if ($thumbnailMedium) {

						if (JFile::exists($fileWatermarkMedium)) {

								$fileWatermark  = $fileWatermarkMedium;

						} else {

							if ($watermarkParams['create'] == 2) {

								$fileWatermark  = $path->image_abs.'watermark-medium.png';

							} else {

								$fileWatermark	= '';

							}

						}

					} else if ($thumbnailLarge) {

						if (JFile::exists($fileWatermarkLarge)) {

								$fileWatermark  = $fileWatermarkLarge;

						} else {

							if ($watermarkParams['create'] == 2) {

								$fileWatermark  = $path->image_abs.'watermark-large.png';

							} else {

								$fileWatermark	= '';

							}

						}

					} else {

							$fileWatermark  = '';

					}

					

					

					if (!JFile::exists($fileWatermark)) {

						$fileWatermark = '';

					}

					

					if ($fileWatermark != '') {

						list($wW, $hW, $typeW)	= GetImageSize($fileWatermark);

					

						

						switch ($watermarkParams['x']) {

							case 'left':

								$locationX	= 0;

							break;

							

							case 'right':

								$locationX	= $dst[2] - $wW;

							break;

							

							case 'center':

							default:

								$locationX	= ($dst[2] / 2) - ($wW / 2);

							break;

						}

						

						switch ($watermarkParams['y']) {

							case 'top':

								$locationY	= 0;

							break;

							

							case 'bottom':

								$locationY	= $dst[3] - $hW;

							break;

							

							case 'middle':

							default:

								$locationY	= ($dst[3] / 2) - ($hW / 2);

							break;

						}

					}

				} else {

					$fileWatermark = '';

				}

			}

			



			

			if ($memory < 50) {

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

				$memoryLimitChanged = 1;

			}

			// Resampling

			// in file

			

			// Watemark

			if ($fileWatermark != '') {

				if (!function_exists('ImageCreateFromPNG')) {

					$errorMsg = 'ErrorNoPNGFunction';

					return false;

				}

				$waterImage1=ImageCreateFromPNG($fileWatermark);

			}

			// End Watermark - - - - - - - - - - - - - - - - - - 

			

	        switch($type) {

	            case IMAGETYPE_JPEG:

					if (!function_exists('ImageCreateFromJPEG')) {

						$errorMsg = 'ErrorNoJPGFunction';

						return false;

					}

					$image1 = ImageCreateFromJPEG($fileIn);

					break;

	            case IMAGETYPE_PNG :

					if (!function_exists('ImageCreateFromPNG')) {

						$errorMsg = 'ErrorNoPNGFunction';

						return false;

					}

					$image1 = ImageCreateFromPNG($fileIn);

					break;

	            case IMAGETYPE_GIF :

					if (!function_exists('ImageCreateFromGIF')) {

						$errorMsg = 'ErrorNoGIFFunction';

						return false;

					}

					$image1 = ImageCreateFromGIF($fileIn);

					break;

	            case IMAGETYPE_WBMP:

					if (!function_exists('ImageCreateFromWBMP')) {

						$errorMsg = 'ErrorNoWBMPFunction';

						return false;

					}

					$image1 = ImageCreateFromWBMP($fileIn);

					break;

	            default:

					$errorMsg = 'ErrorNotSupportedImage';

					return false;

					break;

	        }

			

			if ($image1) {



				$image2 = @ImageCreateTruecolor($dst[2], $dst[3]);

				if (!$image2) {

					$errorMsg = 'ErrorNoImageCreateTruecolor';

					return false;

				}

				

				switch($type) {

					case IMAGETYPE_PNG:

						//imagealphablending($image1, false);

						@imagealphablending($image2, false);

						//imagesavealpha($image1, true);

						@imagesavealpha($image2, true);

					break;

				}

				

				ImageCopyResampled($image2, $image1, $dst[0],$dst[1], $src[0],$src[1], $dst[2],$dst[3], $src[2],$src[3]);

				

				// Watermark - - - - - -

				if ($fileWatermark != '') {

					ImageCopy($image2, $waterImage1, $locationX, $locationY, 0, 0, $wW, $hW);

				}

				// End Watermark - - - -

				

				

	            // Display the Image - not used

	            if ($fileOut == null) {

	                header("Content-type: ". image_type_to_mime_type($typeOut));

	            }

				

				// Create the file

		        if ($typeOut == null) {    // no bitmap

		            $typeOut = ($type == IMAGETYPE_WBMP) ? IMAGETYPE_PNG : $type;

		        }

				

				switch($typeOut) {

		            case IMAGETYPE_JPEG:

						if (!function_exists('ImageJPEG')) {

							$errorMsg = 'ErrorNoJPGFunction';

							return false;

						}



						if ($jfile_thumbs == 1) {

							ob_start();

							if (!@ImageJPEG($image1, 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($image2, $fileOut, $jpeg_quality)) {

								$errorMsg = 'ErrorWriteFile';

								return false;

							}

						}

					break;

		            

					case IMAGETYPE_PNG :

						if (!function_exists('ImagePNG')) {

							$errorMsg = 'ErrorNoPNGFunction';

							return false;

						}

						

						if ($jfile_thumbs == 1) {

							ob_start();

							if (!@ImagePNG($image2, 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($image2, $fileOut)) {

								$errorMsg = 'ErrorWriteFile';

								return false;

							}

						}

					break;

		            

					case IMAGETYPE_GIF :

						if (!function_exists('ImageGIF')) {

							$errorMsg = 'ErrorNoGIFFunction';

							return false;

						}

						

						if ($jfile_thumbs == 1) {

							ob_start();

							if (!@ImageGIF($image2, 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($image2, $fileOut)) {

								$errorMsg = 'ErrorWriteFile';

								return false;

							}

						}

					break;

		            

					default:

						$errorMsg = 'ErrorNotSupportedImage';

						return false;

						break;

				}

				

				// free memory

				ImageDestroy($image1);

	            ImageDestroy($image2);

				if (isset($waterImage1)) {

					ImageDestroy($waterImage1);

				}

	            

				if ($memoryLimitChanged == 1) {

					$memoryString = $memory . 'M';

					ini_set('memory_limit', $memoryString);

				}

	             $errorMsg = ''; // Success

				 return true;

	        } else {

				$errorMsg = 'Error1';

				return false;

			}

			if ($memoryLimitChanged == 1) {

				$memoryString = $memory . 'M';

				ini_set('memory_limit', $memoryString);

			}

	    }

		$errorMsg = 'Error2';

		return false;

	}

}

?>
can you help me?
User avatar
Jan
Phoca Hero
Phoca Hero
Posts: 49299
Joined: 10 Nov 2007, 18:23
Location: Czech Republic
Contact:

Re: Create additional Thumbnail

Post by Jan »

You need to see which methods are calling imagemagic method and these methods declare which thumbnails should be done, so you need to add information to these methods, so they will call the imagemagic e.g. 4x

Jan
If you find Phoca extensions useful, please support the project
Post Reply