php網站縮略圖,PHP縮略圖

本文目錄一覽:

php怎麼生成縮略圖

給你個函數吧

 // *****生成縮略圖*****

     // 只考慮jpg,png,gif格式

     // $srcImgPath 源圖象路徑

     // $targetImgPath 目標圖象路徑

     // $targetW 目標圖象寬度

     // $targetH 目標圖象高度

     function makeThumbnail($srcImgPath,$targetImgPath,$targetW,$targetH)

     {

         $imgSize = GetImageSize($srcImgPath);

         $imgType = $imgSize[2];

         //@ 使函數不向頁面輸出錯誤信息

         switch ($imgType)

        {

            case 1:

                $srcImg = @ImageCreateFromGIF($srcImgPath);

                break;

            case 2:

                $srcImg = @ImageCreateFromJpeg($srcImgPath);

                break;

            case 3:

                $srcImg = @ImageCreateFromPNG($srcImgPath);

                break;

        }

         //取源圖象的寬高

        $srcW = ImageSX($srcImg);

        $srcH = ImageSY($srcImg);

        if($srcW$targetW || $srcH$targetH)

        {

            $targetX = 0;

            $targetY = 0;

            if ($srcW  $srcH)

            {

                $finaW=$targetW;

                $finalH=round($srcH*$finaW/$srcW);

                $targetY=floor(($targetH-$finalH)/2);

            }

            else

            {

                $finalH=$targetH;

                $finaW=round($srcW*$finalH/$srcH);

                $targetX=floor(($targetW-$finaW)/2);

            }

              //function_exists 檢查函數是否已定義

              //ImageCreateTrueColor 本函數需要GD2.0.1或更高版本

            if(function_exists(“ImageCreateTrueColor”))

            {

                $targetImg=ImageCreateTrueColor($targetW,$targetH);

            }

            else

              {

                $targetImg=ImageCreate($targetW,$targetH);

            }

            $targetX=($targetX0)?0:$targetX;

            $targetY=($targetX0)?0:$targetY;

            $targetX=($targetX($targetW/2))?floor($targetW/2):$targetX;

            $targetY=($targetY($targetH/2))?floor($targetH/2):$targetY;

              //背景白色

            $white = ImageColorAllocate($targetImg, 255,255,255);

            ImageFilledRectangle($targetImg,0,0,$targetW,$targetH,$white);

            /*

                   PHP的GD擴展提供了兩個函數來縮放圖象:

                   ImageCopyResized 在所有GD版本中有效,其縮放圖象的演算法比較粗糙,可能會導致圖象邊緣的鋸齒。

                   ImageCopyResampled 需要GD2.0.1或更高版本,其像素插值演算法得到的圖象邊緣比較平滑,

                                                             該函數的速度比ImageCopyResized慢。

            */

            if(function_exists(“ImageCopyResampled”))

            {

                ImageCopyResampled($targetImg,$srcImg,$targetX,$targetY,0,0,$finaW,$finalH,$srcW,$srcH);

            }

            else

            {

                ImageCopyResized($targetImg,$srcImg,$targetX,$targetY,0,0,$finaW,$finalH,$srcW,$srcH);

            }

              switch ($imgType) {

                case 1:

                    ImageGIF($targetImg,$targetImgPath);

                    break;

                case 2:

                    ImageJpeg($targetImg,$targetImgPath);

                    break;

                case 3:

                    ImagePNG($targetImg,$targetImgPath);

                    break;

            }

            ImageDestroy($srcImg);

            ImageDestroy($targetImg);

        }

         else //不超出指定寬高則直接複製

        {

            copy($srcImgPath,$targetImgPath);

            ImageDestroy($srcImg);

        }

     }

代碼已經測試,成功運行!

用PHP怎麼生成高質量的縮略圖

ImageMagick沒用過,一般直接用內置的GD庫,沒有發現你說的這麼嚴重的失真問題。

利用GD庫創建縮略圖的大致思路如下:

依據設定的尺寸創建真彩色畫布$im=createtruecolor(120,90);

讀取原始文件尺寸,按照原始尺寸的寬度和高度比例,計算出縮略圖的大小(可能與給定的尺寸有一定的偏差)

將原始圖像拷貝並縮放到創建的真彩色縮略圖畫布上。

輸出縮略圖文件。

可能就是因為利用的是這個真彩色,縮略圖效果還湊合,也不是說絕對不失真的

你可以去後盾人平台看看,裡面的東西不錯

php簡單縮略圖類|image.class.php

使用方法

$img = new iamge; $img resize( dstimg jpg srcimg jpg ); 說明 這個是按照比例縮放 dstimg jpg是目標文件 srcimg jpg是源文件 後面的是目標文件的寬和高 $img thumb( dstimg jpg scrimg jpg ); 說明 這個是按照比例縮略圖 比如常用在頭像縮略圖的時候 dstimg jpg是目標文件 srcimg jpg是源文件 後面的是目標文件的寬和高 這個是針對GD庫才這樣麻煩的 如果採用Imagick的話 就只需要兩個函數就實現上面的功能 去查下文檔就找到了

?php class image{    public function resize($dstImg $srcImg $dstW $dstH){   list($srcW $srcH) = getimagesize($srcImg);   $scale = min($dstW/$srcW $dstH/$srcH);         $newW = round($srcW * $scale);         $newH = round($srcH * $scale);   $newImg = imagecreatetruecolor($newW $newH);   $srcImg = imagecreatefromjpeg($srcImg);   imagecopyresampled($newImg $srcImg $newW $newH $srcW $srcH);   imagejpeg($newImg $dstImg);  }    public function thumb($dstImg $srcImg $dstW $dstH){   list($srcW $srcH) = getimagesize($srcImg);   $scale = max($dstW/$srcW $dstH/$srcH);   $newW = round($dstW/$scale);   $newH = round($dstH/$scale);   $x = ($srcW $newW)/ ;   $y = ($srcH $newH)/ ;   $newImg = imagecreatetruecolor($dstW $dstH);   $srcImg = imagecreatefromjpeg($srcImg);   imagecopyresampled($newImg $srcImg $x $y $dstW $dstH $newW $newH);   imagejpeg($newImg $dstImg);  }    }

lishixinzhi/Article/program/PHP/201311/21312

php創建縮略圖問題

其實PHP創建縮略圖就是在PHP在原圖片的基礎上創建一張新的圖片的過程,而用PHP創建圖像的過程一般分成四部:

第一步:創建一張畫布(只要是畫圖都需要一張畫布的)

第二步:在畫布畫東西(可以畫各種圖形,如長方形,直線,等等,也可以在畫布上寫字啥的,或者畫其他的圖形)

第三步:畫完圖之後,將圖片輸出,將圖片輸出到瀏覽器,在瀏覽器顯示出來,或者保存為一張新 的圖片(縮略圖一般是保存為圖片文件的)

第四步:因為創建畫布時打開了文件流,所以要關閉資源,節省內存。(個人覺得你可以這樣理解,打開了一畫布,把它鋪開了,畫完了就把畫布捲起來,收起來,不要佔著鋪的地方)

具體的代碼如下:(這段代碼來源於ThinkPHP的圖像類)

?php

class Thumb{

   /**

     * @param string $image  原圖

     * @param string $thumbname 縮略圖文件名

     * @param string $type 圖像格式

     * @param string $maxWidth  寬度

     * @param string $maxHeight  高度

   */

   static create($img, $thumbname, $type=”, $maxWidth=200, $maxHeight=50)

   {

       $info = getimagesize($img);    //獲取原圖的圖像信息(長、寬、格式等)

       if ($info !== false) {

            $srcWidth = $info[‘width’];

            $srcHeight = $info[‘height’];

            $type = empty($type) ? $info[‘type’] : $type;

            $type = strtolower($type);

            $interlace = $interlace ? 1 : 0;

            unset($info);

            $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 計算縮放比例

            if ($scale = 1) {

                // 超過原圖大小不再縮略

                $width = $srcWidth;

                $height = $srcHeight;

            } else {

                // 縮略圖尺寸

                $width = (int) ($srcWidth * $scale);

                $height = (int) ($srcHeight * $scale);

            }

            // 載入原圖(在原圖的基礎上創建畫布,為第一步)

            $createFun = ‘ImageCreateFrom’ . ($type == ‘jpg’ ? ‘jpeg’ : $type);

            if(!function_exists($createFun)) {

                return false;

            }

            $srcImg = $createFun($image);

            //第二步開始

            //創建縮略圖

            if ($type != ‘gif’  function_exists(‘imagecreatetruecolor’))

                $thumbImg = imagecreatetruecolor($width, $height);

            else

                $thumbImg = imagecreate($width, $height);

              //png和gif的透明處理 by luofei614

            if(‘png’==$type){

                imagealphablending($thumbImg, false);//取消默認的混色模式(為解決陰影為綠色的問題)

                imagesavealpha($thumbImg,true);//設定保存完整的 alpha 通道信息(為解決陰影為綠色的問題)    

            }elseif(‘gif’==$type){

                $trnprt_indx = imagecolortransparent($srcImg);

                 if ($trnprt_indx = 0) {

                        //its transparent

                       $trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx);

                       $trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color[‘red’], $trnprt_color[‘green’], $trnprt_color[‘blue’]);

                       imagefill($thumbImg, 0, 0, $trnprt_indx);

                       imagecolortransparent($thumbImg, $trnprt_indx);

              }

            }

            // 複製圖片

            if (function_exists(“ImageCopyResampled”))

                imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);

            else

                imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);

           //第三步:輸出圖像

            // 生成圖片

            $imageFun = ‘image’ . ($type == ‘jpg’ ? ‘jpeg’ : $type);

            $imageFun($thumbImg, $thumbname);

            

            //第四步:關閉畫布

            imagedestroy($thumbImg);

            imagedestroy($srcImg);

            return $thumbname;

        }

        return false;

       

   }

}

?

你使用的時候直接用:

require Thumb.class.php

$thumb = Thumb::create(‘s.jpg’,’thumb_s.jpg’,100,50);

希望我的回答你能滿意

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291726.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-25 14:06
下一篇 2024-12-25 14:06

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • 網站為什麼會被黑客攻擊?

    黑客攻擊是指利用計算機技術手段,入侵或者破壞計算機信息系統的一種行為。網站被黑客攻擊是常見的安全隱患之一,那麼,為什麼網站會被黑客攻擊呢?本文將從不同角度分析這個問題,並且提出相應…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 如何用Python訪問網站

    本文將從以下幾個方面介紹如何使用Python訪問網站:網路請求、POST請求、用戶代理、Cookie、代理IP、API請求。 一、網路請求 Python有三種主流的網路請求庫:ur…

    編程 2025-04-29
  • 如何將Python開發的網站變成APP

    要將Python開發的網站變成APP,可以通過Python的Web框架或者APP框架,將網站封裝為APP的形式。常見的方法有: 一、使用Python的Web框架Django Dja…

    編程 2025-04-28
  • 如何在伺服器上運行網站

    想要在伺服器上運行網站,需要按照以下步驟進行配置和部署。 一、選擇伺服器和域名 想要在伺服器上運行網站,首先需要選擇一台雲伺服器或者自己搭建的伺服器。雲伺服器會提供更好的穩定性和可…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論