手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP 处理图片的类实现代码
PHP 处理图片的类实现代码
摘要:复制代码代码如下:

复制代码 代码如下:

<?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, $dst=null, $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, $dst=null, $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, 0, 0, $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, 0, 0, imagesx($resize_im), imagesy($resize_im));

if(!$output) {

header("Content-type: image/jpeg");

imagejpeg($capture, null, $this->quality);

}

else {

$new_file = empty($dst)? $src:$dst;

imagejpeg($capture, $new_file, $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, 0, 0, $mw, $mh, $this->transparent);

if($output){

$new_file = empty($dst)? $src:$dst;

imagejpeg($im, $new_file, $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[0], $rgb[1], $rgb[2]);

imagefill($im, 0, 0, $white);

//对图片进行缩放

imagecopyresized($im, $src_im, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);

return $im;

}

/**

* 类变量赋值

*/

public function __set($key, $value)

{

$this->$key = $value;

}

/**

* 获取类变量值

*/

public function __get($key)

{

return $this->$key;

}

}

?>

【PHP 处理图片的类实现代码】相关文章:

PHP系统流量分析的程序

用PHP代码给图片加水印

PHP的栏目导航程序

使用PHP的错误处理

PHP+MYSQL的文章管理系统(二)

PHP中的traits实现代码复用使用实例

PHP滚动日志的代码实现

PHP中的类型约束介绍

递归实现php数组转xml的代码分享

我的论坛源代码(九)

精品推荐
分类导航