ホームページ  >  記事  >  バックエンド開発  >  PHPでサムネイルを生成する方法の紹介

PHPでサムネイルを生成する方法の紹介

藏色散人
藏色散人オリジナル
2020-08-20 10:28:524125ブラウズ

php サムネイルを生成するメソッド: 最初に PHP サンプル ファイルを作成し、次に「header("content-type:image/png");」を通じて生成される画像形式を設定し、最後に「image_resize」メソッドを押します。サムネイルを生成するサイズ。

PHPでサムネイルを生成する方法の紹介

推奨: 「PHP ビデオ チュートリアル

PHP で画像のサムネイルを生成する 3 つの方法:

#1. 大きな画像をサムネイルの指定範囲にサムネイル表示します (空白が生じる可能性があります) (元の画像の詳細は失われません)

2. 大きな画像を縮小します

3. サムネイルで指定した範囲内に余白が残らないようにします (元の画像の中央が拡大され、余分な部分がトリミングされます)

3. 大きな画像をサムネイル表示しますサムネイルで指定した範囲を空白を残さずに貼り付けます(元の画像の右端と下端の比率が合わない部分は切り取られます)

以下はコードです:

<?php
// +----------------------------------------------------------------------
// |  把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)
// +---------------------------------------------------------------------- 
$w = $_GET[&#39;w&#39;]?$_GET[&#39;w&#39;]:200;
$h = $_GET[&#39;h&#39;]?$_GET[&#39;h&#39;]:200;
$filename = "stand_test_".$w."_".$h.".jpg";
image_resize( &#39;test.jpg&#39;,$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
        $temp = array(1=>&#39;gif&#39;, 2=>&#39;jpeg&#39;, 3=>&#39;png&#39;);
  
        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[&#39;w&#39;]?$_GET[&#39;w&#39;]:200;
$h = $_GET[&#39;h&#39;]?$_GET[&#39;h&#39;]:200;
$filename = "cut_test_".$w."_".$h.".jpg";
image_resize( &#39;test.jpg&#39;,$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
// 按指定大小生成缩略图,而且不变形,缩略图函数
function image_resize($f, $t, $tw, $th){
        $temp = array(1=>&#39;gif&#39;, 2=>&#39;jpeg&#39;, 3=>&#39;png&#39;);
        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[&#39;w&#39;]?$_GET[&#39;w&#39;]:200;
$h = $_GET[&#39;h&#39;]?$_GET[&#39;h&#39;]:200;
$filename = "strict_test_".$w."_".$h.".jpg";
image_resize( &#39;test.jpg&#39;,$filename, $w, $h);
header("content-type:image/png");//设定生成图片格式
echo file_get_contents($filename);
  
function image_resize($f, $t, $tw, $th){
// 按指定大小生成缩略图,而且不变形,缩略图函数
        $temp = array(1=>&#39;gif&#39;, 2=>&#39;jpeg&#39;, 3=>&#39;png&#39;);
  
        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;
        }
}
?>

以上がPHPでサムネイルを生成する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。