php生成縮略圖的三種模式

n6bg 9年前發布 | 1K 次閱讀 PHP

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 = "standtest".$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;
    }

} ?>

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 = "cuttest".$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; } }

?> 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 = "stricttest".$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;
    }

} ?>

</pre>

 本文由用戶 n6bg 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!