$info = getimagesize($src);
imagecreatefromjpeg($src);
imagecreatefrompng($src);
imagecreatefromjpg($src);
imagecreatefromgif($src);
imagecreatetruecolor($width,$height);
imagecopyresampled(resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h ,int $src_w , int $src_h )
$dst_image:新建的图片
$src_image:需要载入的图片
$dst_x:设定需要载入的图片在新图中的x坐标
$dst_y:设定需要载入的图片在新图中的y坐标
$src_x:设定载入图片要载入的区域x坐标
$src_y:设定载入图片要载入的区域y坐标
$dst_w:设定载入的原图的宽度(在此设置缩放)
$dst_h:设定载入的原图的高度(在此设置缩放)
$src_w:原图要载入的宽度
$src_h:原图要载入的高度
bool imagejpeg(resource $image , mixed $to = null , int $quality = 75)
$image 欲输出的图像资源,如imagecreate()或imagecreatefrom系列函数的返回值
$to 可选,指定输出图像的文件名,如果省略,则原始图像流将被直接输出
$quality 可选,指定图像质量,范围从 0(最差质量,文件最小)到 100(最佳质量,文件最大),默认75 ,imagejpeg() 独有参数
bool imagepng(resource $image , mixed $to = null)
bool imagegif(resource $image , mixed $to = null)
bool imagedestroy(resource $image)
resource imagerotate(resource $image,float $angle)
public function resize($src,$width,$height){
$info = getimagesize($src);
if($info[0] == $width && $info[1] == $height){
return $src;
}
switch ($info['mime']) {
case 'image/jpeg':
$image_wp = imagecreatetruecolor($width, $height);
$image_src = imagecreatefromjpeg($src);
imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
imagedestroy($image_src);
imagejpeg($image_wp,$src);
break;
case 'image/png':
$image_wp = imagecreatetruecolor($width, $height);
$image_src = @imagecreatefrompng($src);
imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
imagedestroy($image_src);
imagepng($image_wp,$src);
break;
case 'image/jpg':
$image_wp = imagecreatetruecolor($width, $height);
$image_src = imagecreatefromjpg($src);
imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
imagedestroy($image_src);
imagejpeg($image_wp,$src);
break;
case 'image/gif':
$image_wp = imagecreatetruecolor($width, $height);
$image_src = imagecreatefromgif($src);
imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
imagedestroy($image_src);
imagegif($image_wp,$src);
default:
break;
}
return $src;
}
class ImageWatermark{
public $markPosType = 0;
public $fontFile = 'arial.ttf';
public $color = '#CCCCCC';
public $fontSize = 12;
public $angle = 0;
private $markPos = array();
private $markImageFile = null, $destImageFile = null;
private $mark_res = null, $mark_width = 0, $mark_height = 0, $mark_type = null;
private $dest_res = null, $dest_width = 0, $dest_height = 0, $dest_type = null;
public function __construct($destImage){
if(!file_exists($destImage)) return false;
$this->destImageFile=$destImage;
$imageInfo = getimagesize($this->destImageFile);
$this->dest_width = $imageInfo[0];$this->dest_height = $imageInfo[1];$this->dest_type = $imageInfo[2];
$this->dest_res = $this->getImageResource($this->destImageFile,$this->dest_type);
}
public function __destruct(){
imagedestroy($this->dest_res);
}
public function appendTextMark($markText){
if($markText==null) return false;
$box = imagettfbbox($this->fontSize,$this->angle,$this->fontFile,$markText);
$this->mark_width = $box[2]-$box[6];
$this->mark_height = $box[3]-$box[7];
$pos = ($this->markPos!=null)?$this->markPos:$this->getMarkPosition($this->markPosType);
$pos[1]+=$this->mark_height;
$RGB=$this->colorHexRgb($this->color);
$imageColor=imagecolorallocate($this->dest_res,$RGB[0],$RGB[1],$RGB[2]);
imagettftext($this->dest_res,$this->fontSize,$this->angle,$pos[0],$pos[1],$imageColor,$this->fontFile,$markText);
}
public function appendImageMark($markImage){
if(!file_exists($markImage)) return false;
$this->markImageFile=$markImage;
$imageInfo = getimagesize($this->markImageFile);
$this->mark_width = $imageInfo[0];$this->mark_height = $imageInfo[1];$this->mark_type = $imageInfo[2];
$this->mark_res = $this->getImageResource($this->markImageFile,$this->mark_type);
$pos = ($this->markPos!=null)?$this->markPos:$this->getMarkPosition($this->markPosType);
imagealphablending($this->dest_res, true);
imagecopy($this->dest_res,$this->mark_res,$pos[0],$pos[1],0,0,$this->mark_width,$this->mark_height);
imagedestroy($this->mark_res);
}
public function write($filename=null){
$this->writeImage($this->dest_res,$filename,$this->dest_type);
}
public function setMarkPos($x,$y){
$this->markPos[0]=$x; $this->markPos[1]=$y;
}
private function colorHexRgb($color){
$color = preg_replace('/#/','',$color);
$R=hexdec($color[0].$color[1]);
$G=hexdec($color[2].$color[3]);
$B=hexdec($color[4].$color[5]);
return array($R,$G,$B);
}
private function getMarkPosition($type=0){
switch($type){
case 0: $x = rand(0,$this->dest_width-$this->mark_width);
$y = rand(0,$this->dest_height-$this->mark_height);
break;
case 1: $x = 0;
$y = 0;
break;
case 2: $x = ($this->dest_width-$this->mark_width)/2;
$y = 0;
break;
case 3: $x = $this->dest_width-$this->mark_width;
$y = 0;
break;
case 4: $x = 0;
$y = ($this->dest_height-$this->mark_height)/2;
break;
case 5: $x = ($this->dest_width-$this->mark_width)/2;
$y = ($this->dest_height-$this->mark_height)/2;
break;
case 6: $x = $this->dest_width-$this->mark_width;
$y = ($this->dest_height-$this->mark_height)/2;
break;
case 7: $x = 0; $y = $this->dest_height-$this->mark_height;
break;
case 8: $x = ($this->dest_width-$this->mark_width)/2;
$y = $this->dest_height-$this->mark_height;
break;
case 9: $x = $this->dest_width-$this->mark_width;
$y = $this->dest_height-$this->mark_height;
break;
default:$x = rand(0,$this->dest_width-$this->mark_width);
$y = rand(0,$this->dest_height-$this->mark_height);
break;
}
return array($x,$y);
}
private function getImageResource($filename,$type=0){
switch($type){
case 1:return imagecreatefromgif($filename);break;
case 2:return imagecreatefromjpeg($filename);break;
case 3:return imagecreatefrompng($filename);break;
default:return null;
}
}
private function writeImage($ImageRes,$filename=null,$type=0){
switch($type) {
case 1:imagegif($ImageRes,$filename);break;
case 2:imagejpeg($ImageRes,$filename);break;
case 3:imagepng($ImageRes,$filename);break;
default:return null;
}
return true;
}
}