Crop resize & watermarking implementation help.
Posted: Wed Jun 11, 2008 2:08 am
Hello, Im using the crop function to resize images, but i also want to implement and watermarking of the resized image.
The crop works fine, but i dont know how to implement watermarking.
I will be able to resize image to specified size w/o losing aspect/stretch problems and then will apply transperant frame .png image -> the result will looks like the images in 3dtotal.com on the main page.
Here is the crop:
So far so good, here is the fun part with the thumb class which also can apply watermark.
And here is the watermarking/image resize class, it can also apply different images according to the $lightness of the image.
The crop works fine, but i dont know how to implement watermarking.
I will be able to resize image to specified size w/o losing aspect/stretch problems and then will apply transperant frame .png image -> the result will looks like the images in 3dtotal.com on the main page.
Here is the crop:
Code: Select all
/**
* CropImage Class
*/
class fth_cropImage
{ // http://www.findmotive.com/2006/12/13/php-crop-image/
var $log = '';
function cropImage($nw, $nh, $source, $dest)
{
$size = getimagesize($source);
$w = $size[0];
$h = $size[1];
$stypeArr = explode( '.', $source );
$stype = strtolower( end($stypeArr) );
switch($stype)
{
case 'gif':
$simg = imagecreatefromgif($source);
break;
case 'jpeg':
$simg = imagecreatefromjpeg($source);
break;
case 'jpg':
$simg = imagecreatefromjpeg($source);
break;
case 'png':
$simg = imagecreatefrompng($source);
break;
}
$dimg = imagecreatetruecolor($nw, $nh);
$wm = $w/$nw;
$hm = $h/$nh;
$h_height = $nh/2;
$w_height = $nw/2;
if($w> $h)
{
$adjusted_width = $w / $hm;
$half_width = $adjusted_width / 2;
$int_width = $half_width - $w_height;
imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
}
elseif( ($w <$h) || ($w == $h) )
{
$adjusted_height = $h / $wm;
$half_height = $adjusted_height / 2;
$int_height = $half_height - $h_height;
imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
}
else
{
imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
}
imagejpeg($dimg,$dest,85);
}Code: Select all
define( 'MM_IMG', ROOT_DIR.'/uploads/main-thumbs/' );
define( 'MM_HTTP_IMG', $config['http_home_url'].'uploads/main-thumbs/' );
if (!file_exists(MM_IMG))
{
if ( !(@mkdir(MM_IMG, 0777)) ) { return '<br> RNB: Unable to mkdir: "'.MM_IMG.'"'; }
if ( !(@chmod(MM_IMG, 0777)) ) { return '<br> RNB: Unable to chmod: "'.MM_IMG.'"'; }
}
$not_resized_image = $img;
$resized_image = MM_IMG.basename($img);
if (
( $size_img = @getimagesize($not_resized_image) ) &&
(
( $size_img[0] > (int)$conf[img_catindex_wigth]) || ($size_img[1] > (int)$conf[img_catindex_hieght]) )
)
{
if (!file_exists( $resized_image ))
{ # make resize:
$cim = new fth_cropImage;
$cim->cropImage(
intval($conf[img_catindex_wigth]),
intval($conf[img_catindex_hieght]),
$not_resized_image,
$resized_image
);
if ( !(@chmod ($resized_image, 0666)) ) { return '<br> MM: Unable to chmod: "'.$resized_image.'"'; }
}
}
And here is the watermarking/image resize class, it can also apply different images according to the $lightness of the image.
Code: Select all
$gd_version = 2;
class thumbnail
{
var $img;
var $watermark_image_light;
var $watermark_image_dark;
function thumbnail($imgfile)
{
//detect image format
$this->img['format']=ereg_replace(".*\.(.*)$","\\1",$imgfile);
$this->img['format']=strtoupper($this->img['format']);
if ($this->img['format']=="JPG" || $this->img['format']=="JPEG") {
$this->img['format']="JPEG";
$this->img['src'] = @imagecreatefromjpeg ($imgfile);
} elseif ($this->img['format']=="PNG") {
$this->img['format']="PNG";
$this->img['src'] = @imagecreatefrompng ($imgfile);
} elseif ($this->img['format']=="GIF") {
$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!";
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;
if ($this->img['src'] == "") {
echo "Not Supported File! Thumbnails can only be made from .jpg, gif and .png images!";
@unlink($imgfile);
exit();
}
}
function size_auto($size=100, $site=0)
{ global $gd_version;
$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($gd_version==1)
{
$this->img['des'] = imagecreate($this->img['lebar_thumb'],$this->img['tinggi_thumb']);
@imagecopyresized ($this->img['des'], $this->img['src'], 0, 0, 0, 0, $this->img['lebar_thumb'], $this->img['tinggi_thumb'], $this->img['lebar'], $this->img['tinggi']);
}
elseif($gd_version==2)
{
$this->img['des'] = imagecreatetruecolor($this->img['lebar_thumb'],$this->img['tinggi_thumb']);
@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
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'].'/watermark_light.png';
$this->watermark_image_dark = ROOT_DIR.'/templates/'.$config['skin'].'/watermark_dark.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;
$watermark_y = $image_height - $margin - $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);
imagecopy($this->img['src'], $watermark, $watermark_x, $watermark_y, 0, 0,$watermark_width, $watermark_height);
imagedestroy($watermark);
}
}



