// 裁切图片类
<?php
class ge_image{
/**
* 获取文件扩展名
* @return string
*/
function fileExt($file_name){
return addslashes(strtolower(substr(strrchr($file_name, '.'), 1, 10)));
}
/**
* 根据扩展名判断文件是否为图像
* @param string $ext 扩展名
* @return bool
*/
function isImageExt($ext){
static $img_ext = array('jpg', 'jpeg', 'png', 'bmp','gif','giff');
return in_array($ext, $img_ext) ? 1 : 0;
}
/**
* 获取图像信息
* @param string $target 文件路径
* @return mixed
*/
function getImageInfo($target){
$ext = ge_image::fileExt($target);
$is_image = ge_image::isImageExt($ext);
if(!$is_image)
return false;
elseif(!is_readable($target))
return false;
elseif($image_info = @getimagesize($target)){
list($width, $height, $type) = !empty($image_info) ? $image_info : array('', '', '');
$size = $width * $height;
if($is_image && !in_array($type, array(1,2,3,6,13)))
return false;
$image_info['type'] = strtolower(substr(image_type_to_extension($image_info[2]),1));
return $image_info;
}
else
return false;
}
/**
+----------------------------------------------------------
* 生成图像验证码
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @param string $length 位数
* @param string $mode 类型
* @param string $type 图像格式
* @param string $width 宽度
* @param string $height 高度
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function buildImageVerify($length=4,$mode=1,$type='gif',$width=58,$height=26,$verifyName='verify'){
require_once APP_ROOT_PATH."system/utils/ge_string.php";
$randval = ge_string::rand_string($length,$mode);
ge_session::set($verifyName,md5($randval));
$width = ($length*10+10)>$width?$length*10+10:$width;
if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
$im = @imagecreatetruecolor($width,$height);
}else {
$im = @imagecreate($width,$height);
}
$r = Array(255,255,255,255);
$g = Array(255,255,255,255);
$b = Array(255,255,255,255);
$key = mt_rand(0,3);
$backColor = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]); //背景色(随机)
$borderColor = imagecolorallocate($im, 100, 100, 100); //边框色
$pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //点颜色
@imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor);
$stringColor = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120));
// 干扰
// for($i=0;$i<10;$i++){
// $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
// imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
// }
for($i=0;$i<25;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor);
}
// for($i=0;$i<$length;$i++) {
// imagestring($im,5,$i*10+5,mt_rand(1,8),$randval{$i}, $stringColor);
// }
@imagestring($im, 5, 5, 3, $randval, $stringColor);
ge_image::output($im,$type);
}
static function output($im,$type='gif',$filename=''){
ob_clean();
header("Content-type: image/".$type);
$ImageFun='image'.$type;
if(empty($filename)) {
if(!$ImageFun($im)){
ob_clean();
header("Content-type: image/jpeg");
if(!imagejpeg($im)){
ob_clean();
header("Content-type: image/png");
if(!imagepng($im)){
ge_session::delete("verify");
}
}
}
}else{
$ImageFun($im,$filename);
}
imagedestroy($im);
}
public function thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,$interlace=true,$filepath = ''){
$info = ge_image::getImageInfo($image);
if($info !== false){
$srcWidth = $info[0];
$srcHeight = $info[1];
$type = $info['type'];
$interlace = $interlace? 1:0;
unset($info);
if($maxWidth > 0 && $maxHeight > 0)
$scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例
elseif($maxWidth == 0)
$scale = $maxHeight/$srcHeight;
elseif($maxHeight == 0)
$scale = $maxWidth/$srcWidth;
if($scale >= 1){
// 超过原图大小不再缩略
$width = $srcWidth;
$height = $srcHeight;
}else{
// 缩略图尺寸
$width = (int)($srcWidth*$scale);
$height = (int)($srcHeight*$scale);
}
if($gen == 1){
$width = $maxWidth;
$height = $maxHeight;
}
$paths = pathinfo($image);
if(empty($filepath))
$thumbname = $paths['dirname'].'/'.$paths['filename'].'_'.$maxWidth.'x'.$maxHeight.'.jpg';
else
$thumbname = $filepath;
$thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname);
// 载入原图
$createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
if(!function_exists($createFun))
$createFun = 'imagecreatefromjpeg';
$srcImg = $createFun($image);
//创建缩略图
if($type!='gif' && function_exists('imagecreatetruecolor'))
$thumbImg = imagecreatetruecolor($width, $height);
else
$thumbImg = imagecreate($width, $height);
$x = 0;
$y = 0;
if($gen == 1 && $maxWidth > 0 && $maxHeight > 0){
$resize_ratio = $maxWidth/$maxHeight;
$src_ratio = $srcWidth/$srcHeight;
if($src_ratio >= $resize_ratio){
$x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
$width = ($height * $srcWidth) / $srcHeight;
}else{
$y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2;
$height = ($width * $srcHeight) / $srcWidth;
}
}
// 复制图片
if(function_exists("imagecopyresampled"))
imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);
else
imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);
if('gif'==$type || 'png'==$type) {
$background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿色
imagecolortransparent($thumbImg,$background_color); // 设置为透明色,若注释掉该行则输出绿色的图
}
// 对jpeg图形设置隔行扫描
if('jpg'==$type || 'jpeg'==$type)
imageinterlace($thumbImg,$interlace);
// 生成图片
imagejpeg($thumbImg,$thumbname,100);
imagedestroy($thumbImg);
imagedestroy($srcImg);
return array('url'=>$thumburl,'path'=>$thumbname);
}
return false;
}
}
?>
// 裁切图片方法
function get_spec_image($img_path,$width=0,$height=0,$gen=1){
if($width==0&&$height==0)
$new_path = $img_path;
else{
$img_name = substr($img_path,0,-4);
$img_ext = substr($img_path,-3);
$new_path = $img_name."_".$width."x".$height.".jpg";
if(!file_exists(APP_ROOT_PATH.$new_path)){
import('ORG.Util.ge_image');
$image = new ge_image();
$thumb = $image->thumb(APP_ROOT_PATH.$img_path,$width,$height,$gen); //APP_ROOT_PATH 自定义的项目物理路径
}
}
return $new_path;
}
//方法调用
{:get_spec_image(图片路径,330,240)}