PHP 处理图片的类实现代码

前端之家收集整理的这篇文章主要介绍了PHP 处理图片的类实现代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle"><a style="CURSOR: pointer" data="70322" class="copybut" id="copybut70322" onclick="doCopy('code70322')"> 代码如下:

<div class="codebody" id="code70322">
<?PHP
/
author:yagas
email:yagas60@21cn.com
*/
class Image
{
/* 类保护变量 /
protected $th_width = 100;
protected $th_height = 50;
protected $quality = 85; //图片质量
protected $transparent = 50; //水印透明度
protected $background = "255,255,255"; //背景颜色
/

生成缩略图文件
@param $src 原图文件
@param $dst 目标文件
/
public function thumb($src,$dst=null,$output=true)
{
$thumb = array($this->th_width,$this->th_height);
$this->scale($src,$thumb,$dst,$output);
}
/
图片按百分比进行缩放处理
@param string $src 原图文件
@param string $dst 输入的目标文件
@param float/array $zoom 缩放比例,浮点类型时按百分比绽放,数组类型时按指定大小时行缩放
@param boolean $output 是否生成文件输出
/
public function scale($src,$zoom=1,$output=true)
{
if(!file_exists($src)) die('File not exists.');
if(!$zoom) die('the zoom undefine.');
$src_im = $this->IM($src);
$old_width = imagesx($src_im);
if(is_float($zoom)) {
//按百分比进行缩放
$new_width = $old_width * $zoom;
}
elseif(is_array($zoom)) {
//明确的缩放尺寸
$new_width = $zoom[0];
}
//是否定义的缩放的高度
if(!isset($zoom[1])) {
//等比例缩放
$resize_im = $this->imageresize($src_im,$new_width);
}
else {
//非等比例缩放
$resize_im = $this->imageresize($src_im,$new_width,$zoom[1]);
}
if(!$output) {
header("Content-type: image/jpeg");
imagejpeg($resize_im,null,$this->quality);
}
else {
$new_file = empty($dst)? $src:$dst;
imagejpeg($resize_im,$new_file,$this->quality);
}
imagedestroy($im);
imagedestroy($nIm);
}
/*
图片进行裁切
@param $src 原始文件
@param $dst 目标文件
@param $output 是否生成目标文件
/
public function capture($src,$output=true) {
if(!file_exists($src)) die('File not exists.');
$width = $this->th_width;
$height = $this->th_height;
$src_im = $this->IM($src);
$old_width = imagesx($src_im);
$old_height = imagesy($src_im);
$capture = imagecreatetruecolor($width,$height);
$rgb = explode(",",$this->background);
$white = imagecolorallocate($capture,$rgb[0],$rgb[1],$rgb[2]);
imagefill($capture,$white);
//当图片大于缩略图时进行缩放
if($old_width > $width && $old_height>$height) {
$resize_im = $this->imageresize($src_im,$width);
//图片比例不合规范时,重新计算比例进行裁切
if(imagesy($resize_im) < $height) {
$proportion = $old_height/$this->th_height;
$resize_im = $this->imageresize($src_im,$old_width/$proportion);
}
$posx = 0;
$posy = 0;
}
else {
//图片小于缩略图时将图片居中显示
$posx = ($width-$old_width)/2;
$posy = ($height-$old_height)/2;
$resize_im = $src_im;
}
imagecopy($capture,$resize_im,$posx,$posy,imagesx($resize_im),imagesy($resize_im));
if(!$output) {
header("Content-type: image/jpeg");
imagejpeg($capture,$this->quality);
}
else {
$new_file = empty($dst)? $src:$dst;
imagejpeg($capture,$this->quality);
}
imagedestroy($src_im);
@imagedestroy($resize_im);
imagedestroy($capture);
}
/

写入水印图片
@param $src 需要写入水印的图片
@param $mark 水印图片
@param $transparent 水印透明度
*/
public function mark($src,$mark,$dst='',$output=true)
{
$mark_info = getimagesize($mark);
$src_info = getimagesize($src);
list($mw,$mh) = $mark_info;
list($sw,$sh) = $src_info;
$px = $sw - $mw;
$py = $sh - $mh;
$im = $this->IM($src);
$mim = $this->IM($mark);
imagecopymerge($im,$mim,$px,$py,$mw,$mh,$this->transparent);
if($output){
$new_file = empty($dst)? $src:$dst;
imagejpeg($im,$this->quality);
}
else
{
header('Content-type: image/jpeg');
imagejpeg($im);
}
imagedestroy($im);
imagedestroy($mim);
}
/
通过文件获取不同的GD对象
/
protected function IM($file)
{
if(!file_exists($file)) die('File not exists.');
$info = getimagesize($file);
switch($info['mime'])
{
case 'image/gif':
$mim = imagecreatefromgif($file);
break;
case 'image/png':
$mim = imagecreatefrompng($file);
imagealphablending($mim,false);
imagesavealpha($mim,true);
break;
case 'image/jpeg':
$mim = imagecreatefromjpeg($file);
break;
default:
die('File format errors.');
}
return $mim;
}
/

图片进行缩放的处理
@param resource $src_im 图像GD对象
@param integer $width 图片的宽度
@param integer $height 图片的高度,如果不设置高度,将对图片进行等比例缩放
@return resuorce $im 返回一个GD对象
/
protected function imageresize($src_im,$width,$height=null) {
$old_width = imagesx($src_im);
$old_height = imagesy($src_im);
$proportion = $old_width/$old_height;
$new_width = $width;
$new_height = is_null($height)? round($new_width / $proportion):$height;
//创建新的图象并填充默认的背景色
$im = imagecreatetruecolor($new_width,$new_height);
$rgb = explode(",$this->background);
$white = imagecolorallocate($im,$rgb[2]);
imagefill($im,$white);
//对图片进行缩放
imagecopyresized($im,$src_im,$new_height,$old_width,$old_height);
return $im;
}
/
类变量赋值
/
public function __set($key,$value)
{
$this->$key = $value;
}
/

获取类变量值
/
public function __get($key)
{
return $this->$key;
}
}
?>

猜你在找的PHP相关文章