一个功能强大的PHP图片类

一个功能强大的PHP图片类

里面封装有:

1、上传图片功能

2、按指定大小(单位PX)生成缩略图

3、按指定百分比(原图百分比)生成缩略图

4、自动水印功能,包括文字水印和图片水印。

5、外围封装了调用接口,一条语句实现图片从上传>>生成缩略图>>打上水印三部曲。

6、自动识别,当图片少于多少时不生成缩略图。

7、自动识别,当图片小于多少时,不打水印。

8、外围封装接口,可以直接调用子功能(上传、缩略图、水印)

调用方法:

<?php

//设置网站根目录

define('MK_ROOT', 'D:\www\');

//设置网站图片根目录

define('MK_IMGDIR', 'E:\image\');

//程序执行完返回的提示页路径

$_MK['reff'] = 'index.php';

//调用图片类

include 'image.inc.php';

//类实例化

$img = new mk_img;

//调用,返回 $file_info 是一个数组,里面有图片的各种信息。

$file_info = $img->autoimg(表单中NAME名称,图片根目录下的子目录名,文件最大上传大小, 缩略图宽, 缩略图高);

//完成,后续处理,将图片信息存放数据库

?>

image.inc.php

<?php

if(!defined('IN_MK')) {

exit('Access Denied');

}

class mk_img{

var $new_width = 160;

var $new_height = 120;

var $img_info;

var $imgdir_s = 'aaa';

var $func;

var $base_name ;

function get_name(){

$this->base_name = $this->base_name ? $this->base_name : './'.time().'_'.random(6);

return $this->base_name;

}

function get_info($old_img){

if (is_file($old_img)){

$this->img_info = GetImageSize($old_img);

if ($this->img_info['2'] == 2){

$this->func['create'] = 'imagecreatefromjpeg';

$this->func['copy'] = 'imagejpeg';

$this->img_info['extension'] = 'jpg';

}elseif ($this->img_info['2'] == 1){

$this->func['create'] = 'imagecreatefromgif';

$this->func['copy'] = 'imagegif';

$this->img_info['extension'] = 'gif';

}elseif ($this->img_info['2'] == 3){

$this->func['create'] = 'imagecreatefrompng';

$this->func['copy'] = 'imagepng';

$this->img_info['extension'] = 'png';

}else{

$this->error('not image file');

}

}else{

$this->error('file no find');

}

}

function thumb_per($img_url, $img_dir='./together/0/', $in_percent=0.35,$obj_filename=''){

$in_percent = ($in_percent>1 || $in_percent<=0) ? 0.35 : $in_percent ;

$this->get_info($img_url);

if ($in_percent != 0){

$this->new_width = ceil($this->img_info['0'] * $in_percent);

$this->new_height = ceil($this->img_info['1'] * $in_percent);

}else{

$this->new_width = ceil($this->img_info['0']);

$this->new_height = ceil($this->img_info['1']);

}

if ($obj_filename!=''){

$this->new_thumb_name = $obj_filename;

}

$this->create_sub($img_url,$img_dir);

return $this->file_dir.$this->base_name.'.'.$this->img_info['extension'];

}

function thumb_abs($img_url, $img_dir='./together/0/', $new_width=120, $new_height=120,$obj_filename=''){

$this->get_info($img_url);

$this->new_width = ceil(abs($new_width))>1 ? ceil(abs($new_width)) : $this->new_width ;

$this->new_height = ceil(abs($new_height))>1 ? ceil(abs($new_height)) : $this->new_height;

if (($this->new_width > $this->img_info['0']) && ($this->new_height > $this->img_info['1'])){

$this->new_width = $this->img_info['0'];

$this->new_height = $this->img_info['1'];

}else{

if ($this->new_width && ($this->img_info['0'] < $this->img_info['1'])) {

$this->new_width = ($this->new_height / $this->img_info['1']) * $this->img_info['0'];

} else {

$this->new_height = ($this->new_width / $this->img_info['0']) * $this->img_info['1'];

}

}

if ($obj_filename!=''){

$this->new_thumb_name = $obj_filename;

}

$this->create_sub($img_url,$img_dir);

return $this->file_dir.$this->base_name.'.'.$this->img_info['extension'];

}

//子创建

function create_sub($img_url,$img_dir){

$image_o = $this->func['create']($img_url);

if(function_exists("imagecopyresampled")){

$image_n = imagecreatetruecolor($this->new_width, $this->new_height);

imagecopyresampled($image_n, $image_o, 0, 0, 0, 0, $this->new_width, $this->new_height, $this->img_info['0'], $this->img_info['1']);

}else{

$image_n = imagecreate($this->new_width, $this->new_height);

imagecopyresized($image_n, $image_o, 0, 0, 0, 0, $this->new_width, $this->new_height, $this->img_info['0'], $this->img_info['1']);

}

$this->file_dir = $this->file_dir ? $this->file_dir : $img_dir;

$this->new_thumb_name = (!empty($this->new_thumb_name)) ? $this->new_thumb_name : $this->get_name().'_s.'.$this->img_info['extension'] ;

$this->func['copy']($image_n,$this->file_dir.$this->new_thumb_name);

imagedestroy($image_n);

return true;

}

function upload($attach_value,$attach_dir='',$attach_size='1024000'){

global $_FILES;

if(COUNT($_FILES)==0){

$this->error('no files');

}

$this->file_error = $_FILES[$attach_value]['error'];

if ($this->file_error != 0){

$this->error('upload error');

}

$this->file_name = $_FILES[$attach_value]['name'];

$this->file_type = $_FILES[$attach_value]['type'];

$this->file_size = $_FILES[$attach_value]['size'];

$this->file_tmpname = $_FILES[$attach_value]['tmp_name'];

$this->get_info($this->file_tmpname);

if($attach_size && $this->file_size > $attach_size) {

$this->error('max size:'.$this->file_size);

}

if(!is_dir(MK_IMGROOT.$attach_dir)) {

mkdir(MK_IMGROOT.$attach_dir, 0777);

}

$this->file_dir = MK_IMGROOT.$attach_dir;

$this->file_newname = $attach_dir.'/'.$this->get_name().'.'.$this->img_info['extension'];

$this->file_thumbname = $attach_dir.'/'.$this->get_name().'_s.'.$this->img_info['extension'];

$this->file_dirname = MK_IMGROOT.$this->file_newname;

if(function_exists('move_uploaded_file')) {

if(@move_uploaded_file($this->file_tmpname, $this->file_dirname)) {

$attach_saved = true;

}

} elseif(@copy($this->file_tmpname, $this->file_dirname)) {

$attach_saved = true;

}

$return_data = '';

if ($attach_saved){

$return_data = array('name'=>$this->file_newname , 'size'=>$this->file_size , 'type'=>$this->file_type, 'ext'=>$this->img_info['extension'], 'imgdir'=>$this->file_dirname, 'thumb'=>$this->file_thumbname, 'width'=>$this->img_info['0'], 'height'=>$this->img_info['1']);

}

return $return_data;

}

function watermark_img($img_url){

if (is_readable(MK_IMGROOT.'./watermark.png')){

$watermark_file = MK_IMGROOT.'./watermark.png';

$image_w = imagecreatefrompng($watermark_file);

}else{

$watermark_file = MK_IMGROOT.'./watermark.gif';

$image_w = imagecreatefromgif($watermark_file);

}

$this->get_info($watermark_file);

$watermark_width = $this->img_info['0'];

$watermark_height = $this->img_info['1'];

$this->get_info($img_url);

if ($this->img_info['2'] <= 3){

$image_o = $this->func['create']($img_url);

if (function_exists("imagecreatetruecolor")){

$image_n = imagecreatetruecolor($this->img_info['0'], $this->img_info['1']);

}else{

$image_n = imagecreate($this->img_info['0'], $this->img_info['1']);

}

imageCopy($image_n, $image_o, 0, 0, 0, 0, $this->img_info['0'], $this->img_info['1']);

unset($watermark_file);

$watermark_x = $this->img_info['0'] - $watermark_width;

$watermark_y = $this->img_info['1'] - $watermark_height;

imageCopy($image_n, $image_w, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height);

$this->func['copy']($image_n,$img_url);

imagedestroy($image_n);

}else{

return false;

}

}

function watermark_text($img_url,$text_message='www.7ego.cn'){

$this->get_info($img_url);

if ($this->img_info['2'] <= 3){

$image_o = $this->func['create']($img_url);

if (function_exists("imagecreatetruecolor")){

$image_n = imagecreatetruecolor($this->img_info['0'], $this->img_info['1']);

}else{

$image_n = imagecreate($this->img_info['0'], $this->img_info['1']);

}

imageCopy($image_n, $image_o, 0, 0, 0, 0, $this->img_info['0'], $this->img_info['1']);

$text_font = MK_ROOT.'en.fon';

$text_color = imagecolorallocate($image_n, 0, 0, 0);

$text_bgcolor = imagecolorallocate($image_n, 150, 150, 150);

$bg_color = imagecolorallocate($image_n, 250, 250, 200);

$text_width = imagefontwidth($text_message)*(strlen($text_message)-1)*2;

$text_height = imagefontheight($text_message)*2;

imagefilledrectangle($image_n, 2, 0, $text_width, $text_height, $bg_color);

@imagettftext($image_n, 2, 0, 11, 11, $text_bgcolor, $text_font, $text_message);

imagettftext($image_n, 2, 0, 10, 10, $text_color, $text_font, $text_message);

$this->func['copy']($image_n,$img_url);

imagedestroy($image_n);

}

}

function autoimg($attach_value,$attach_dir='',$attach_size='1024000', $new_width=120, $new_height=120){

$imgreturn = $this->upload($attach_value,$attach_dir,$attach_size);

//if ($imgreturn['width']>800){

// $this->thumb_abs($imgreturn['imgdir'], $this->file_dir, 640, 480,$imgreturn['imgdir']);

//}

$this->thumb_abs($imgreturn['imgdir'], $this->file_dir, $new_width, $new_height);

if ($imgreturn['width']>160 OR $imgreturn['height']>160){

$this->watermark_img($imgreturn['imgdir']);

$this->watermark_text($imgreturn['imgdir'],'www.7ego.cn');

}

return $imgreturn;

}

function error($msg){

global $_MK;

showmessage($msg,$_MK['reff']);

function_exists('mexit') ? mexit() : exit();

}

}

?>