php生成缩略图的三种模式

开发技术 作者: 2024-07-27 14:05:01
php生成缩略图的三种模式

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

1、把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
2、把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)
3、把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)
 
thumb_stand.PHP
<?PHP
// http://localhost/exa5/thumb_image/thumb_stand.PHP?w=200&h=200
// 把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
$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,$th,$fw,$fh);
        if($outfunc($timg,$t)){
                return true;
        }else{
                return false;
        }
}
?>

thumb_cut.PHP
<?PHP
// http://localhost/exa5/thumb_image/thumb_cut.PHP?w=200&h=200
// 把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "cut_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);

// 按指定大小生成缩略图,而且不变形,缩略图函数
function image_resize($f,$th){
        $temp = array(1=>'gif',3=>'png');
        list($fw,$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,$zw,$zh,$fh);

        // 再截取到指定的宽高度
        $timg = imagecreatetruecolor($tw,$zimg,0+$_zw,0+$_zh,$zw-$_zw*2,$zh-$_zh*2);
//        
        if($outfunc($timg,$t)){
                return true;
        }else{
                return false;
        }
}

?>
thumb_strict.PHP
<?PHP
// http://localhost/exa5/thumb_image/thumb_strict.PHP?w=200&h=200
// 把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)
$w = $_GET['w']?$_GET['w']:200;
$h = $_GET['h']?$_GET['h']:200;
$filename = "strict_test_".$w."_".$h.".jpg";
image_resize( 'test.jpg',$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,$t)){
                return true;
        }else{
                return false;
        }
}
?>
 

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_51725.html