258 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			258 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | if( ! defined( 'DATALIFEENGINE' ) ) {die( "Hacking attempt!" );} | ||
|  | 
 | ||
|  | class thumbnail { | ||
|  | 	var $img; | ||
|  | 	var $watermark_image_light; | ||
|  | 	var $watermark_image_dark; | ||
|  | 	 | ||
|  | 	function thumbnail($imgfile) { | ||
|  | 		//detect image format
 | ||
|  | 
 | ||
|  | 		$info = @getimagesize($imgfile);  | ||
|  | 
 | ||
|  | 		if( $info[2] == 2 ) { | ||
|  | 			$this->img['format'] = "JPEG"; | ||
|  | 			$this->img['src'] = @imagecreatefromjpeg( $imgfile ); | ||
|  | 		} elseif( $info[2] == 3 ) { | ||
|  | 			$this->img['format'] = "PNG"; | ||
|  | 			$this->img['src'] = @imagecreatefrompng( $imgfile ); | ||
|  | 		} elseif( $info[2] == 1 ) { | ||
|  | 			$this->img['format'] = "GIF"; | ||
|  | 			$this->img['src'] = @imagecreatefromgif( $imgfile ); | ||
|  | 		} else { | ||
|  | 			echo "Not Supported File! Thumbnails can only be made from .jpg, gif and .png images!"; | ||
|  | 			@unlink( $imgfile ); | ||
|  | 			exit(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if( !$this->img['src'] ) { | ||
|  | 			echo "Not Supported File! Thumbnails can only be made from .jpg, gif and .png images!"; | ||
|  | 			@unlink( $imgfile ); | ||
|  | 			exit(); | ||
|  | 		 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$this->img['lebar'] = @imagesx( $this->img['src'] ); | ||
|  | 		$this->img['tinggi'] = @imagesy( $this->img['src'] ); | ||
|  | 		$this->img['lebar_thumb'] = $this->img['lebar']; | ||
|  | 		$this->img['tinggi_thumb'] = $this->img['tinggi']; | ||
|  | 		//default quality jpeg
 | ||
|  | 		$this->img['quality'] = 90; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function size_auto($size = 100, $site = 0) { | ||
|  | 
 | ||
|  | 		$size = explode ("x", $size); | ||
|  | 
 | ||
|  | 		if ( count($size) == 2 ) { | ||
|  | 			$size[0] = intval($size[0]); | ||
|  | 			$size[1] = intval($size[1]); | ||
|  | 			return $this->crop( intval($size[0]), intval($size[1]) ); | ||
|  | 
 | ||
|  | 		} else { | ||
|  | 			$size[0] = intval($size[0]); | ||
|  | 			return $this->scale( intval($size[0]), $site); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function crop($nw, $nh) { | ||
|  | 
 | ||
|  | 		$w = $this->img['lebar']; | ||
|  | 		$h = $this->img['tinggi']; | ||
|  | 
 | ||
|  | 		if( $w <= $nw AND $h <= $nh ) { | ||
|  | 			$this->img['lebar_thumb'] = $w; | ||
|  | 			$this->img['tinggi_thumb'] = $h; | ||
|  | 			return 0; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$nw = min($nw, $w); | ||
|  | 		$nh = min($nh, $h); | ||
|  | 
 | ||
|  | 		$size_ratio = max($nw / $w, $nh / $h); | ||
|  | 
 | ||
|  | 		$src_w = ceil($nw / $size_ratio); | ||
|  | 		$src_h = ceil($nh / $size_ratio); | ||
|  | 
 | ||
|  | 		$sx = floor(($w - $src_w)/2); | ||
|  | 		$sy = floor(($h - $src_h)/2); | ||
|  | 
 | ||
|  | 		$this->img['des'] = imagecreatetruecolor($nw, $nh); | ||
|  | 
 | ||
|  | 		if ( $this->img['format'] == "PNG" ) { | ||
|  | 			imagealphablending( $this->img['des'], false); | ||
|  | 			imagesavealpha( $this->img['des'], true); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		imagecopyresampled($this->img['des'],$this->img['src'],0,0,$sx,$sy,$nw,$nh,$src_w,$src_h); | ||
|  | 
 | ||
|  | 		$this->img['src'] = $this->img['des']; | ||
|  | 		return 1; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function scale($size = 100, $site = 0) { | ||
|  | 
 | ||
|  | 		$site = intval( $site ); | ||
|  | 		 | ||
|  | 		if( $this->img['lebar'] <= $size and $this->img['tinggi'] <= $size ) { | ||
|  | 			$this->img['lebar_thumb'] = $this->img['lebar']; | ||
|  | 			$this->img['tinggi_thumb'] = $this->img['tinggi']; | ||
|  | 			return 0; | ||
|  | 		} | ||
|  | 		 | ||
|  | 		switch ($site) { | ||
|  | 			 | ||
|  | 			case "1" : | ||
|  | 				if( $this->img['lebar'] <= $size ) { | ||
|  | 					$this->img['lebar_thumb'] = $this->img['lebar']; | ||
|  | 					$this->img['tinggi_thumb'] = $this->img['tinggi']; | ||
|  | 					return 0; | ||
|  | 				} else { | ||
|  | 					$this->img['lebar_thumb'] = $size; | ||
|  | 					$this->img['tinggi_thumb'] = ($this->img['lebar_thumb'] / $this->img['lebar']) * $this->img['tinggi']; | ||
|  | 				} | ||
|  | 				 | ||
|  | 				break; | ||
|  | 			 | ||
|  | 			case "2" : | ||
|  | 				if( $this->img['tinggi'] <= $size ) { | ||
|  | 					$this->img['lebar_thumb'] = $this->img['lebar']; | ||
|  | 					$this->img['tinggi_thumb'] = $this->img['tinggi']; | ||
|  | 					return 0; | ||
|  | 				} else { | ||
|  | 					$this->img['tinggi_thumb'] = $size; | ||
|  | 					$this->img['lebar_thumb'] = ($this->img['tinggi_thumb'] / $this->img['tinggi']) * $this->img['lebar']; | ||
|  | 				} | ||
|  | 				 | ||
|  | 				break; | ||
|  | 			 | ||
|  | 			default : | ||
|  | 				 | ||
|  | 				if( $this->img['lebar'] >= $this->img['tinggi'] ) { | ||
|  | 					$this->img['lebar_thumb'] = $size; | ||
|  | 					$this->img['tinggi_thumb'] = ($this->img['lebar_thumb'] / $this->img['lebar']) * $this->img['tinggi']; | ||
|  | 				 | ||
|  | 				} else { | ||
|  | 					 | ||
|  | 					$this->img['tinggi_thumb'] = $size; | ||
|  | 					$this->img['lebar_thumb'] = ($this->img['tinggi_thumb'] / $this->img['tinggi']) * $this->img['lebar']; | ||
|  | 				 | ||
|  | 				} | ||
|  | 				 | ||
|  | 				break; | ||
|  | 		} | ||
|  | 		if ($this->img['lebar_thumb'] < 1 ) $this->img['lebar_thumb'] = 1; | ||
|  | 	        if ($this->img['tinggi_thumb'] < 1 ) $this->img['tinggi_thumb'] = 1;		 | ||
|  | 		$this->img['des'] = imagecreatetruecolor( $this->img['lebar_thumb'], $this->img['tinggi_thumb'] ); | ||
|  | 
 | ||
|  | 		if ( $this->img['format'] == "PNG" ) { | ||
|  | 			imagealphablending( $this->img['des'], false); | ||
|  | 			imagesavealpha( $this->img['des'], true); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		@imagecopyresampled( $this->img['des'], $this->img['src'], 0, 0, 0, 0, $this->img['lebar_thumb'], $this->img['tinggi_thumb'], $this->img['lebar'], $this->img['tinggi'] ); | ||
|  | 		 | ||
|  | 		$this->img['src'] = $this->img['des']; | ||
|  | 		return 1; | ||
|  | 
 | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function jpeg_quality($quality = 90) { | ||
|  | 		//jpeg quality
 | ||
|  | 		$this->img['quality'] = $quality; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function save($save = "") { | ||
|  | 		 | ||
|  | 		if( $this->img['format'] == "JPG" || $this->img['format'] == "JPEG" ) { | ||
|  | 			//JPEG
 | ||
|  | 			imagejpeg( $this->img['src'], $save, $this->img['quality'] ); | ||
|  | 		} elseif( $this->img['format'] == "PNG" ) { | ||
|  | 			//PNG
 | ||
|  | 			imagealphablending( $this->img['src'], false); | ||
|  | 			imagesavealpha( $this->img['src'], true); | ||
|  | 			imagepng( $this->img['src'], $save ); | ||
|  | 		} elseif( $this->img['format'] == "GIF" ) { | ||
|  | 			//GIF
 | ||
|  | 			imagegif( $this->img['src'], $save ); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		imagedestroy( $this->img['src'] ); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function show() { | ||
|  | 		if( $this->img['format'] == "JPG" || $this->img['format'] == "JPEG" ) { | ||
|  | 			//JPEG
 | ||
|  | 			imageJPEG( $this->img['src'], "", $this->img['quality'] ); | ||
|  | 		} elseif( $this->img['format'] == "PNG" ) { | ||
|  | 			//PNG
 | ||
|  | 			imagePNG( $this->img['src'] ); | ||
|  | 		} elseif( $this->img['format'] == "GIF" ) { | ||
|  | 			//GIF
 | ||
|  | 			imageGIF( $this->img['src'] ); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		imagedestroy( $this->img['src'] ); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	// *************************************************************************
 | ||
|  | 	function insert_watermark($min_image) { | ||
|  | 		global $config; | ||
|  | 		$margin = 7; | ||
|  | 		 | ||
|  | 		$this->watermark_image_light = ROOT_DIR . '/templates/' . $config['skin'] . '/images/watermark.png'; | ||
|  | 		$this->watermark_image_dark = ROOT_DIR . '/templates/' . $config['skin'] . '/images/watermark.png'; | ||
|  | 		 | ||
|  | 		$image_width = imagesx( $this->img['src'] ); | ||
|  | 		$image_height = imagesy( $this->img['src'] ); | ||
|  | 		 | ||
|  | 		list ( $watermark_width, $watermark_height ) = getimagesize( $this->watermark_image_light ); | ||
|  | 		 | ||
|  | 		$watermark_x = $image_width - $margin - $watermark_width + $margin; | ||
|  | 		//$watermark_y = $image_height - $margin - $watermark_height;
 | ||
|  |         $watermark_y = $image_height - $watermark_height; | ||
|  | 		 | ||
|  | 		$watermark_x2 = $watermark_x + $watermark_width; | ||
|  | 		$watermark_y2 = $watermark_y + $watermark_height; | ||
|  | 		 | ||
|  | 		if( $watermark_x < 0 or $watermark_y < 0 or $watermark_x2 > $image_width or $watermark_y2 > $image_height or $image_width < $min_image or $image_height < $min_image ) { | ||
|  | 			return; | ||
|  | 		} | ||
|  | 		 | ||
|  | 		$test = imagecreatetruecolor( 1, 1 ); | ||
|  | 		imagecopyresampled( $test, $this->img['src'], 0, 0, $watermark_x, $watermark_y, 1, 1, $watermark_width, $watermark_height ); | ||
|  | 		$rgb = imagecolorat( $test, 0, 0 ); | ||
|  | 		 | ||
|  | 		$r = ($rgb >> 16) & 0xFF; | ||
|  | 		$g = ($rgb >> 8) & 0xFF; | ||
|  | 		$b = $rgb & 0xFF; | ||
|  | 		 | ||
|  | 		$max = min( $r, $g, $b ); | ||
|  | 		$min = max( $r, $g, $b ); | ||
|  | 		$lightness = ( double ) (($max + $min) / 510.0); | ||
|  | 		imagedestroy( $test ); | ||
|  | 		 | ||
|  | 		$watermark_image = ($lightness < 0.5) ? $this->watermark_image_light : $this->watermark_image_dark; | ||
|  | 		 | ||
|  | 		$watermark = imagecreatefrompng( $watermark_image ); | ||
|  | 		 | ||
|  | 		imagealphablending( $this->img['src'], TRUE ); | ||
|  | 		imagealphablending( $watermark, TRUE ); | ||
|  | 		 | ||
|  | 		 if( $this->img['format'] == "PNG" ) { | ||
|  |             $png8fix = imagecreatetruecolor( $image_width, $image_height ); | ||
|  |             imagecopy( $png8fix, $this->img['src'], 0, 0, 0, 0, $image_width, $image_height ); | ||
|  |             imagecopy( $png8fix, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height ); | ||
|  |             imagecopy( $this->img['src'], $png8fix, 0, 0, 0, 0, $image_width, $image_height ); | ||
|  |             imagedestroy( $png8fix ); | ||
|  |         }else imagecopy( $this->img['src'], $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height ); | ||
|  | 		 | ||
|  | 		imagedestroy( $watermark ); | ||
|  | 	 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | ?>
 |