美文网首页
开发企业网站10 -- 图片缩略__batch

开发企业网站10 -- 图片缩略__batch

作者: 潘肚饿兵哥哥 | 来源:发表于2019-12-08 23:12 被阅读0次

\color{rgba(254, 67, 101, .8)}{有些地方没搞懂}
\color{rgba(254, 67, 101, .8)}{主要在讲第二种}

\color{rgba(254, 67, 101, .8)}{第一种:}

<?php
//图片缩略:先创建一个小的画布尺寸,然后把要缩的图片按坐标放到这个画布上,最后再把这个画布存起来,就完成缩略图了
//用GD库中的 imagecopyresampled(); 函数
// 这有一个问题,如果画布尺寸和原图尺寸比例不一样,缩小后就会变形(拉伸)

$filename = 'public/uploads/images/20191020/1.jpg';

//getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
//把获取到的数组中的值赋给list函数中的变量
list($src_w, $src_h) = getimmagesize($filename);


$per = 0.5;//设置缩放比例:缩小一半

//目标尺寸:如果不在前面设置缩放比例,也可以在这里直接写固定尺寸
//$dst_w = 200;  $dst_h = 300; 但是这样写会变形,要想他不变形,就要算好原图的比例,这里用等比例缩放的方式,计算原图宽高比例然后缩放的方式在2.php
$dst_w = $src_w*$per;
$dst_h = $src_h*$per;


// imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
//file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
$src_image = imagecreatefromstring(file_get_contents($filename));

//imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
$dst_image = imagecreatetruecolor($dst_w, $dst_h);

//从目标的0,0点坐标开始平铺
$dst_x = 0;
$dst_y = 0;


/*
    imagecopyresampled — 重采样拷贝部分图像并调整大小

    imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

    dst_image
    目标图象连接资源。

    src_image
    源图象连接资源。

    dst_x
    目标(画布的坐标) X 坐标点。

    dst_y
    目标(画布的坐标) Y 坐标点。

    src_x
    源(从原图片的那个位置开始截)的 X 坐标点。

    src_y
    源(从原图片的那个位置开始截)的 Y 坐标点。

    dst_w
    目标宽度。

    dst_h
    目标高度。

    src_w
    源图象的宽度。

    src_h
    源图象的高度。
*/
imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

// 生成目标图片并保存
imagejpeg($dst_image, 'thumb.jpg');

//销毁资源:两个资源,原图像和生成的图像
imagedestroy($src_image);
imagedestroy($dst_image);

?>

\color{rgba(254, 67, 101, .8)}{第二种:}

\color{rgba(254, 67, 101, .8)}{主要以第二种为准}

<?php
    <?php
    //图片缩略:固定大小,并保证图片不变形   
    //先创建一个小的画布尺寸,然后把要缩的图片按坐标放到这个画布上,最后再把这个画布存起来,就完成缩略图了
    //用GD库中的 imagecopyresampled(); 函数
    // 这有一个问题,如果画布尺寸和原图尺寸比例不一样,缩小后就会变形(拉伸)
    
    $filename = 'public/uploads/images/20191020/1.jpg';
    
    //getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
    //把获取到的数组中的值赋给list函数中的变量
    list($src_w, $src_h) = getimmagesize($filename);
    
    //目标尺寸:如果不在前面设置缩放比例,也可以在这里直接写固定尺寸
    //$dst_w = 200;  $dst_h = 300; 但是这样写会变形,要想他不变形,就要算好原图的比例,这里用计算原图宽高比例然后缩放的方式等比例缩放的方式,等比例缩放的方式在1.php
    $dst_w = 300;
    $dst_h = 200;


    //计算原图宽高比例
    $src_scale = $src_w/$src_h;


    //然后要拿到目标图的宽高比
    $dst_scale = $src_w/$src_h;


    //如果原图和目标图比例不一致,需要分具体情况解决
    //分为原图比目标图大和原图比目标图小的情况,比例相等就不用处理了
    if($src_scale > $dst_scale){
        
    }else{
        $dst_x = 0;
        $dst_y = 0;
    }

    
    /*
     imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
     $src_image = imagecreatefromstring(file_get_contents($filename));
    
    imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);
    
    从目标的0,0点坐标开始平铺
    $dst_x = 0;
    $dst_y = 0;
    
    */
    
    /*
        imagecopyresampled — 重采样拷贝部分图像并调整大小
    
        imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
    
        dst_image
        目标图象连接资源。
    
        src_image
        源图象连接资源。
    
        dst_x
        目标(画布的坐标) X 坐标点。
    
        dst_y
        目标(画布的坐标) Y 坐标点。
    
        src_x
        源(从原图片的那个位置开始截)的 X 坐标点。
    
        src_y
        源(从原图片的那个位置开始截)的 Y 坐标点。
    
        dst_w
        目标宽度。
    
        dst_h
        目标高度。
    
        src_w
        源图象的宽度。
    
        src_h
        源图象的高度。
    */



    //计算: 原图的宽/目标图的宽
    $per1 = $dst_w/$src_w;

    //计算: 原图的高/目标图的高
    $per2 = $dst_h/$src_h;

    //上面计算好了原图和目标图的宽高比例,哪一个比例小,就取哪一个作为计算的比例,如果用大的那一个,会超出画布(目标图)
    $per = min($per1, $per2);
    $new_dst_w = $src_w*$per;
    $new_dst_h = $src_h*$per;


    //修改过后的图应该从这个坐标开始铺:(原宽、高 - 新宽、高)/2,让图片正好居中显示
    $dst_x = ($dst_w-$new_dst_w)/2;
    $dst_y = ($dst_h-$new_dst_h)/2;

    // imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
    //file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
    $src_image = imagecreatefromstring(file_get_contents($filename));

    //imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);

    

    //把背景颜色从黑色变成白色
    $white = imagecolorallocate($dst_image, 255, 255, 255);
    imagefill($dst_image, 0, 0, $white);


    imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $new_dst_w, $new_dst_h, $src_w, $src_h);
    

    //拿到图片后缀
    //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
    $suffix = strtolower(strrchr($filename, '.'));


    switch($suffix){
        case '.jpg':
        case '.jpeg': 
            $func = 'imagejpeg';break;//把这两种格式统一写成一种,本身这两个后缀都是同一个格式,所以case后面的内容都是一样的,所以第一个case后面不用写
        case '.gif';
            $func = 'imagegif';break;
        case '.png';
            $func = 'imagepng';break;
    }


    //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
    //dirname: 取一个文件的目录部分
    //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
    //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个s_
    $path = dirname($filename);
    $thumb = $path.'/s_'.basename($filename);


    // 生成目标图片并保存
    //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
    //判定后,用另一种写法
    //用$thumb将图片名也换掉,并加上路径
    $func($dst_image, $thumb);
    
    
    
    //销毁资源:两个资源,原图像和生成的图像
    imagedestroy($src_image);
    imagedestroy($dst_image);
    
    ?>
?>

\color{rgba(254, 67, 101, .8)}{第三种:}

<?php
    <?php
    //图片缩略:保证图片不变形   
    //先创建一个小的画布尺寸,然后把要缩的图片按坐标放到这个画布上,最后再把这个画布存起来,就完成缩略图了
    //用GD库中的 imagecopyresampled(); 函数
    // 这有一个问题,如果画布尺寸和原图尺寸比例不一样,缩小后就会变形(拉伸)
    
    $filename = 'public/uploads/images/20191020/1.jpg';
    
    //getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
    //把获取到的数组中的值赋给list函数中的变量
    list($src_w, $src_h) = getimmagesize($filename);
    
    //目标尺寸:如果不在前面设置缩放比例,也可以在这里直接写固定尺寸
    //$dst_w = 200;  $dst_h = 300; 但是这样写会变形,要想他不变形,就要算好原图的比例,这里用计算原图宽高比例然后缩放的方式等比例缩放的方式,等比例缩放的方式在1.php
    $dst_w = 300;
    $dst_h = 200;


    //计算原图宽高比例
    $src_scale = $src_w/$src_h;


    //然后要拿到目标图的宽高比
    $dst_scale = $src_w/$src_h;


    //如果原图和目标图比例不一致,需要分具体情况解决
    //分为原图比目标图大和原图比目标图小的情况,比例相等就不用处理了
    if($src_scale > $dst_scale){
        
    }else{
        $dst_x = 0;
        $dst_y = 0;
    }

    
    /*
     imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
     $src_image = imagecreatefromstring(file_get_contents($filename));
    
    imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);
    
    从目标的0,0点坐标开始平铺
    $dst_x = 0;
    $dst_y = 0;
    
    */
    
    /*
        imagecopyresampled — 重采样拷贝部分图像并调整大小
    
        imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
    
        dst_image
        目标图象连接资源。
    
        src_image
        源图象连接资源。
    
        dst_x
        目标(画布的坐标) X 坐标点。
    
        dst_y
        目标(画布的坐标) Y 坐标点。
    
        src_x
        源(从原图片的那个位置开始截)的 X 坐标点。
    
        src_y
        源(从原图片的那个位置开始截)的 Y 坐标点。
    
        dst_w
        目标宽度。
    
        dst_h
        目标高度。
    
        src_w
        源图象的宽度。
    
        src_h
        源图象的高度。
    */



    //计算: 原图的宽/目标图的宽
    $per1 = $dst_w/$src_w;

    //计算: 原图的高/目标图的高
    $per2 = $dst_h/$src_h;

    //上面计算好了原图和目标图的宽高比例,哪一个比例小,就取哪一个作为计算的比例,如果用大的那一个,会超出画布(目标图)
    $per = min($per1, $per2);
    $new_dst_w = $src_w*$per;
    $new_dst_h = $src_h*$per;


    //修改过后的图应该从这个坐标开始铺:(原宽、高 - 新宽、高)/2,让图片正好居中显示
    $dst_x = 0;
    $dst_y = 0;

    // imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
    //file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
    $src_image = imagecreatefromstring(file_get_contents($filename));

    //imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
    $dst_image = imagecreatetruecolor($new_dst_w, $new_dst_h);

    
    imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $new_dst_w, $new_dst_h, $src_w, $src_h);
    
    // 生成目标图片并保存
    imagejpeg($dst_image, 'thumb2.jpg');
    
    //销毁资源:两个资源,原图像和生成的图像
    imagedestroy($src_image);
    imagedestroy($dst_image);
    
    ?>
?>

\color{rgba(254, 67, 101, .8)}{把第二种封装成函数:}
\color{rgba(254, 67, 101, .8)}{写函数要记得return}
\color{rgba(254, 67, 101, .8)}{为了保证传值时宽高不用按顺序写}
\color{rgba(254, 67, 101, .8)}{可以先把宽高写成一个数组}

<?php
    //图片缩略:固定大小,并保证图片不变形   
    //先创建一个小的画布尺寸,然后把要缩的图片按坐标放到这个画布上,最后再把这个画布存起来,就完成缩略图了
    //用GD库中的 imagecopyresampled(); 函数
    // 这有一个问题,如果画布尺寸和原图尺寸比例不一样,缩小后就会变形(拉伸)
    
    $filename = 'public/uploads/images/20191020/1.jpg';
    

    //目标尺寸:如果不在前面设置缩放比例,也可以在这里直接写固定尺寸
    //$dst_w = 200;  $dst_h = 300; 但是这样写会变形,要想他不变形,就要算好原图的比例,这里用计算原图宽高比例然后缩放的方式等比例缩放的方式,等比例缩放的方式在1.php
    $dst_w = 300;
    $dst_h = 200;


    //调用函数
    thumb($filename, $dst_w, $dst_h, false);

    //默认参数还需要一个是否固定宽高,默认是
    function thumb($filename, $dst_w=0, $dst_h=0, $is_fixed=true){
        //getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
        //把获取到的数组中的值赋给list函数中的变量
        list($src_w, $src_h) = getimmagesize($filename);
        


        //计算原图宽高比例
        $src_scale = $src_w/$src_h;


        //然后要拿到目标图的宽高比
        $dst_scale = $src_w/$src_h;


        //如果原图和目标图比例不一致,需要分具体情况解决
        //分为原图比目标图大和原图比目标图小的情况,比例相等就不用处理了
        if($src_scale > $dst_scale){
            
        }else{
            $dst_x = 0;
            $dst_y = 0;
        }

        
        /*
        imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
        file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
        $src_image = imagecreatefromstring(file_get_contents($filename));
        
        imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
        $dst_image = imagecreatetruecolor($dst_w, $dst_h);
        
        从目标的0,0点坐标开始平铺
        $dst_x = 0;
        $dst_y = 0;
        
        */
        
        /*
            imagecopyresampled — 重采样拷贝部分图像并调整大小
        
            imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
        
            dst_image
            目标图象连接资源。
        
            src_image
            源图象连接资源。
        
            dst_x
            目标(画布的坐标) X 坐标点。
        
            dst_y
            目标(画布的坐标) Y 坐标点。
        
            src_x
            源(从原图片的那个位置开始截)的 X 坐标点。
        
            src_y
            源(从原图片的那个位置开始截)的 Y 坐标点。
        
            dst_w
            目标宽度。
        
            dst_h
            目标高度。
        
            src_w
            源图象的宽度。
        
            src_h
            源图象的高度。
        */



        //计算: 原图的宽/目标图的宽
        $per1 = $dst_w/$src_w;

        //计算: 原图的高/目标图的高
        $per2 = $dst_h/$src_h;

        //上面计算好了原图和目标图的宽高比例,哪一个比例小,就取哪一个作为计算的比例,如果用大的那一个,会超出画布(目标图)
        $per = min($per1, $per2);
        $new_dst_w = $src_w*$per;
        $new_dst_h = $src_h*$per;


        //修改过后的图应该从这个坐标开始铺:(原宽、高 - 新宽、高)/2,让图片正好居中显示
        $dst_x = ($dst_w-$new_dst_w)/2;
        $dst_y = ($dst_h-$new_dst_h)/2;

        // imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
        //file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
        $src_image = imagecreatefromstring(file_get_contents($filename));

        //imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
        $dst_image = imagecreatetruecolor($dst_w, $dst_h);

        

        //把背景颜色从黑色变成白色
        $white = imagecolorallocate($dst_image, 255, 255, 255);
        imagefill($dst_image, 0, 0, $white);


        imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $new_dst_w, $new_dst_h, $src_w, $src_h);
        

        //拿到图片后缀
        //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
        $suffix = strtolower(strrchr($filename, '.'));


        switch($suffix){
            case '.jpg':
            case '.jpeg': 
                $func = 'imagejpeg';break;//把这两种格式统一写成一种,本身这两个后缀都是同一个格式,所以case后面的内容都是一样的,所以第一个case后面不用写
            case '.gif';
                $func = 'imagegif';break;
            case '.png';
                $func = 'imagepng';break;
        }


        //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
        //dirname: 取一个文件的目录部分
        //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
        //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个s_
        $path = dirname($filename);
        $thumb = $path.'/s_'.basename($filename);


        // 生成目标图片并保存
        //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
        //判定后,用另一种写法
        //用$thumb将图片名也换掉,并加上路径
        $func($dst_image, $thumb);
        
        
        
        //销毁资源:两个资源,原图像和生成的图像
        imagedestroy($src_image);
        imagedestroy($dst_image);
        return $thumb;
        }

?>

\color{rgba(254, 67, 101, .8)}{============================================}

\color{rgba(254, 67, 101, .8)}{下面是网络复制的图片缩略案例:}
https://www.youhutong.com/index.php/article/index/139.html

\color{rgba(254, 67, 101, .8)}{PHP生成图片缩略图的三种方法:}
\color{rgba(254, 67, 101, .8)}{1、把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)}
\color{rgba(254, 67, 101, .8)}{2、把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)}
\color{rgba(254, 67, 101, .8)}{3、把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)}

\color{rgba(254, 67, 101, .8)}{下面是代码:}

<?php
// +----------------------------------------------------------------------
// |  把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
// +---------------------------------------------------------------------- 
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "stand_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
        $temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
  
        list($fw, $fh, $tmp) = getimagesize($f);
  
        if(!$temp[$tmp]){
                return false;
        }
        $tmp = $temp[$tmp];
        $infunc = "imagecreatefrom$tmp";
        $outfunc = "image$tmp";
  
        $fimg = $infunc($f);
  
        // 使缩略后的图片不变形,并且限制在 缩略图宽高范围内
        if($fw/$tw > $fh/$th){
            $th = $tw*($fh/$fw);
        }else{
            $tw = $th*($fw/$fh);
        }
  
        $timg = imagecreatetruecolor($tw, $th);
        imagecopyresampled($timg, $fimg, 0,0, 0,0, $tw,$th, $fw,$fh);
        if($outfunc($timg, $t)){
                return true;
        }else{
                return false;
        }
}
?>
 
 
 
 
 
 
<?php
// +----------------------------------------------------------------------
// |  把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)
// +----------------------------------------------------------------------
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "cut_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
// 按指定大小生成缩略图,而且不变形,缩略图函数
function image_resize($f, $t, $tw, $th){
        $temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
        list($fw, $fh, $tmp) = getimagesize($f);
        if(!$temp[$tmp]){
                return false;
        }
        $tmp = $temp[$tmp];
        $infunc = "imagecreatefrom$tmp";
        $outfunc = "image$tmp";
  
        $fimg = $infunc($f);
//      $fw = 10;
//      $fh = 4;
//      $tw = 4;
//      $th = 2;
        // 把图片铺满要缩放的区域
        if($fw/$tw > $fh/$th){
            $zh = $th;
            $zw = $zh*($fw/$fh);
            $_zw = ($zw-$tw)/2;
        }else{
            $zw = $tw;
            $zh = $zw*($fh/$fw);
            $_zh = ($zh-$th)/2;
        }
//        echo $zw."<br>";   
//        echo $zh."<br>";   
//        echo $_zw."<br>";   
//        echo $_zh."<br>";   
//        exit;
        $zimg = imagecreatetruecolor($zw, $zh);
        // 先把图像放满区域
        imagecopyresampled($zimg, $fimg, 0,0, 0,0, $zw,$zh, $fw,$fh);
  
        // 再截取到指定的宽高度
        $timg = imagecreatetruecolor($tw, $th);
        imagecopyresampled($timg, $zimg, 0,0, 0+$_zw,0+$_zh, $tw,$th, $zw-$_zw*2,$zh-$_zh*2);
//        
        if($outfunc($timg, $t)){
                return true;
        }else{
                return false;
        }
}
  
?>
 
 
 
 
 
 
 
 
 

<?php
// +----------------------------------------------------------------------
// | 把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)
// +----------------------------------------------------------------------
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "strict_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
        $temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
  
        list($fw, $fh, $tmp) = getimagesize($f);
  
        if(!$temp[$tmp]){
                return false;
        }
        $tmp = $temp[$tmp];
        $infunc = "imagecreatefrom$tmp";
        $outfunc = "image$tmp";
  
        $fimg = $infunc($f);
  
        if($fw/$tw > $fh/$th){
                $fw = $tw * ($fh/$th);
        }else{
                $fh = $th * ($fw/$tw);
        }
  
        $timg = imagecreatetruecolor($tw, $th);
        imagecopyresampled($timg, $fimg, 0,0, 0,0, $tw,$th, $fw,$fh);
        if($outfunc($timg, $t)){
                return true;
        }else{
                return false;
        }
}
?>

相关文章

网友评论

      本文标题:开发企业网站10 -- 图片缩略__batch

      本文链接:https://www.haomeiwen.com/subject/dnamgctx.html