php图片缩放裁剪与水印代码

代码语言:php

所属分类:图片处理

代码描述:php图片缩放裁剪与水印代码

代码标签: 裁剪 水印

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php
/**
* 图片裁剪
* @param string $picname 原图路径
* @param string $x $Y 裁剪开区域左上角的点的坐标
* @param string $width 裁剪宽度
* @param string $height 裁剪高度
* @param string $pre 处理后图片名的前缀名
* @return String 返回后的图片名称(带路径),如a.jpg=>n_a.jpg
*/
function crop($picname, $width, $height, $x = 0, $y = 0, $pre = "n_") {
    $picnameinfo = getimageSize($picname); //获取图片源的基本信息
    //创建源图的实例
    $src = imagecreatefromstring(file_get_contents($picname));
    //裁剪开区域左上角的点的坐标
    $x = 100;
    $y = 12;
    //裁剪区域的宽和高
    $width = 200;
    $height = 400;
    //最终保存成图片的宽和高,和源要等比例,否则会变形
    $final_width = 100;
    $final_height = round($final_width * $height / $width);

    //将裁剪区域复制到新图片上,并根据源和目标的宽高进行缩放或者拉升
    $new_image = imagecreatetruecolor($final_width, $final_height);
    imagecopyresampled($new_image, $src, 0, 0, $x, $y, $final_width, $final_height, $width, $height);


    //输出图像(根据源图像的类型,输出为对应的类型)
    $picinfo = pathinfo($picname); //解析源图像的名字和路径信息
    $newpicname = $picinfo["dirname"]."/".$pre.$picinfo["basename"];
    switch ($picnameinfo[2]) {
        case 1:
            imagegif($new_image, $newpicname);
            break;
        case 2:
            imagejpeg($new_image, $newpicname);
            break;
        case 3:
            imagepng($new_image, $newpicname);
            break;
    }
    //释放图片资源
    imagedestroy($src);
    imagedestroy($new_image);

    return $newpicname;
}

/**
* 为一张图片添加上一个logo图片水印(以保存的方式实现)
* @param string $picname 被处理图片源
* @param string $logo 水印图片
* @param string $pre 处理后图片名的前缀名
* @return String 返回后的图片名称(带路径),如a.jpg=>n_a.jpg
*/
function watermark($picname, $logo, $pre = "n_") {
    $picnameinfo = getimageSize($picname); //获取图片源的基本信息
    $logoinfo = getimageSize($logo); //获取logo图片的基本信息
    //var_dump($logoinfo);
    //根据图片类型创建出对应的图片源
    switch ($picnameinfo[2]) {
        case 1: //gif
            $im = imagecreatefromgif($picname);
            break;
        case 2: //jpg
            $im = imagecreatefromjpeg($picname);
            break;
        case 3: //png
            $im = imagecreatefrompng($picname);
            break;
        default:
            die("图片类型错误!");
        }
        //根据logo图片类型创建出对应的图片源
        switch ($logoinfo[2]) {
            case 1: //gif
                $logoim = imagecreatefromgif($logo);
                break;
            case 2: //jpg
                $logoim = imagecreatefromjpeg($logo);
                break;
            case 3: //png
                $logoim = imagecreatefrompng($logo);
                break;
            default:
                die("logo图片类型错误!");
            }


            //执行图片水印处理
            imagecopyresampled($im, $logoim, $picnameinfo[0]-$logoinfo[0], $picnameinfo[1]-$logoinfo[1], 0, 0, $logoinfo[0], $logoinfo[1], $logoinfo[0], $logoinfo[1]);

            //输出图像(根据源图像的类型,输出为对应的类型)
            $picinfo = pathinfo($picname); //解析源图像的名字和路径信息
            $newpicname = $picinfo["dirname"]."/".$pre.$picinfo["basename"];
            switch ($picnameinfo[2]) {
                case 1:
                    imagegif($im, $newpicname);
                    break;
                case 2:
                    imagejpeg($im, $newpicname);
                    break;
                case 3:
                    imagepng($im, $newpicname);
                    break;
            }
            //释放图片资源
            imagedestroy($im);
            imagedestroy($logoim);
            //返回结果
            return $newpicname;
        }

        /**

        * 图片裁剪函数,支持指定定点裁剪和方位裁剪两种裁剪模式

        * @param   $src_file       原图片路径

        * @param      $new_width      裁剪后图片宽度(当宽度超过原图片宽度时,取原图片宽度)

        * @param      $new_height     裁剪后图片高度(当宽度超过原图片宽度时,取原图片高度)

        * @param      $type           裁剪方式,1-方位模式裁剪;0-定点模式裁剪。

        * @param      $pos            方位模式裁剪时的起始方位(当选定点模式裁剪时,此参数不起作用)

        *                                      1为顶端居左,2为顶端居中,3为顶端居右;

        *                                      4为中部居左,5为中部居中,6为中部居右;

        *                                      7为底端居左,8为底端居中,9为底端居右;

        * @param      $start_x        起始位置X (当选定方位模式裁剪时,此参数不起作用)

        * @param      $start_y        起始位置Y(当选定方位模式裁剪时,此参数不起作用)

        * @return                  裁剪图片存储路径

        */

        function thumb($src_file, $new_width, $new_height, $type = 1, $pos = 5, $start_x = 0, $start_y = 0) {
            $pathinfo = pathinfo($src_file);

            $dst_file = $pathinfo['dirname'] . '/' . $pathinfo['filename'] .'_'. $new_width . 'x' . $new_height . '.' . $pathinfo['extension'];

            if (!file_exists($dst_file)) {
                if ($new_width < 1 || $new_height < 1) {
                    echo "params width or height error !";

                    exit();

                }

                if (!file_exists($src_file)) {
                    echo $src_file . " is not exists !";

                    exit();

                }

                // 图像类型

                $img_type = exif_imagetype($src_file);

                $support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);

                if (!in_array($img_type, $support_type, true)) {
                    echo "只支持jpg、png、gif格式图片裁剪";

                    exit();

                }

                /* 载入图像 */

                switch ($img_type) {
                    case IMAGETYPE_JPEG :

                        $src_img = imagecreatefromjpeg($src_file);

                        break;

                    case IMAGETYPE_PNG :

                        $src_img = imagecreatefrompng($src_file);

                        break;

                    case IMAGETYPE_GIF :

                        $src_img = imagecreatefromgif($src_file);

                        break;

                    default:

                        echo "载入图像错误!";

                        exit();

                    }

                    /* 获取源图片的宽度和高度 */

                  .........完整代码请登录后点击上方下载按钮下载查看

网友评论0