裁切图片

// 裁切图片类

<?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)}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值