PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类
PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类。使用foreach 循环处理的时候,需要 sleep 设定一个时间 或者 按照处理后的返回值 ,否则处理不完。
代码//文件名:image_process.class.php
<?php
class Image_process{
public $source;//原图
public $source_width;//宽
public $source_height;//高
public $source_type_id;
public $orign_name;
public $orign_dirname;
//传入图片路径
public function __construct($source){
$this->typeList = array(1=>'gif',2=>'jpg',3=>'png');
$ginfo = getimagesize($source);
$this->source_width= $ginfo;
$this->source_height = $ginfo;
$this->source_type_id= $ginfo;
$this->orign_url = $source;
$this->orign_name = basename($source);
$this->orign_dirname = dirname($source);
}
//判断并处理,返回PHP可识别编码
public function judgeType($type,$source){
if($type==1){
return ImageCreateFromGIF($source);//gif
}else if($type==2){
return ImageCreateFromJPEG($source);//jpg
}else if($type==3){
return ImageCreateFromPNG($source);//png
}else{
return false;
}
}
//生成水印图
public function watermarkImage($logo){
$linfo = getimagesize($logo);
$logo_width = $linfo;
$logo_height= $linfo;
$logo_type_id = $linfo;
$sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url);
$logoHandle = $this->judgeType($logo_type_id,$logo);
if( !$sourceHandle || ! $logoHandle ){
return false;
}
$x = $this->source_width - $logo_width;
$y = $this->source_height- $logo_height;
ImageCopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_width) or die("fail to combine");
$newPic = $this->orign_dirname .'\water_'. time().'.'. $this->typeList[$this->source_type_id];
if( $this->saveImage($sourceHandle,$newPic)){
imagedestroy($sourceHandle);
imagedestroy($logoHandle);
}
}
// fix 宽度
// height = true 固顶高度
// width= true 固顶宽度
public function fixSizeImage($width,$height){
if( $width > $this->source_width) $this->source_width;
if( $height > $this->source_height ) $this->source_height;
if( $width === false){
$width = floor($this->source_width / ($this->source_height / $height));
}
if( $height === false){
$height = floor($this->source_height / ($this->source_width / $width));
}
$this->tinyImage($width,$height);
}
//比例缩放
// $scale 缩放比例
public function scaleImage($scale){
$width= floor($this->source_width * $scale);
$height = floor($this->source_height * $scale);
$this->tinyImage($width,$height);
}
//创建略缩图
private function tinyImage($width,$height){
$tinyImage = imagecreatetruecolor($width, $height );
$handle = $this->judgeType($this->source_type_id,$this->orign_url);
if(function_exists('imagecopyresampled')){
imagecopyresampled($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
}else{
imagecopyresized($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
}
$newPic = time().'_'.$width.'_'.$height.'.'. $this->typeList[$this->source_type_id];
$newPic = $this->orign_dirname .'\thumb_'. $newPic;
if( $this->saveImage($tinyImage,$newPic)){
imagedestroy($tinyImage);
imagedestroy($handle);
}
}
//保存图片
private function saveImage($image,$url){
if(ImageJpeg($image,$url)){
return true;
}
}
}代码//使用
<?php
include('image_process.class.php');
$m = array(
'D:\myspace\test\image_process\1.jpg',
'D:\myspace\test\image_process\2.jpg',
'D:\myspace\test\image_process\3.jpg',
'D:\myspace\test\image_process\4.jpg'
);
$img= 'D:\myspace\test\image_process\1.jpg';
$logo = 'D:\myspace\test\image_process\logo.png';
foreach( $m as $item){
$s = new Image_process( $item );
$s->watermarkImage($logo);
$s->scaleImage(0.8);
$s->fixSizeImage(200,false);
sleep(1);
} 这个功能确实不错。在图片上传的时候很有用。
页:
[1]