當前位置:首頁 » 編程語言 » php圖片縮略圖

php圖片縮略圖

發布時間: 2023-05-11 08:44:36

php上傳圖片自動生成縮略圖

########################## index.php
<form action="index.php?item=file_upload_ok" method="post" enctype="multipart/form-data">
<input type="file" name="download" >
<INPUT TYPE="text" NAME="describe" >
<INPUT TYPE="submit" value="提交">
</form>
<?
if(!empty($_GET['item'])){

if($_GET['item'] == 'file_upload_ok')
{
// 引入圖片類
include("thumb_class.php");
$t = new ThumbHandler();
// 獲取上傳文件
$file=$_FILES[download];
$yName = $file[name]; // 原文件名字
$tmpName = $file[tmp_name]; // 原文件句柄

// 圖片 縮放
$t->setSrcImg($tmpName); //原文件
$t->setDstImg("new_x.jpg");//目標圖片
$t->createImg(80,80); //生成圖片 寬 300 高 300
// 圖片原始大小
$t->setSrcImg($tmpName); //原文件
$t->setDstImg("new_d.jpg");//目標圖片
$t->createImg($t->src_w,$t->src_h); //生成圖片 $t->src_w 原圖片寬 $t->src_h 原圖片高

}
}

#############
thumb_class.php 圖片類文件 由於代碼過多請到我 空間 日 記 查看
h t t p ://user.qzone.qq.com/182887459/

② php怎麼生成縮略圖

給你個函數吧
//*****生成縮略圖*****
//只考慮jpg,png,gif格式
//$srcImgPath源圖象路徑
//$targetImgPath目標圖象路徑
//$targetW目標圖象寬度
//$targetH目標圖象高度
functionmakeThumbnail($srcImgPath,$targetImgPath,$targetW,$targetH)
{
$imgSize=GetImageSize($srcImgPath);
$imgType=$imgSize[2];
//@使函數不向頁面輸出錯誤信息
switch($imgType)
{
case1:
$srcImg=@ImageCreateFromGIF($srcImgPath);
break;
case2:
$srcImg=@ImageCreateFromJpeg($srcImgPath);
break;
case3:
$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=($targetX<0)?0:$targetX;
$targetY=($targetX<0)?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){
case1:
ImageGIF($targetImg,$targetImgPath);
break;
case2:
ImageJpeg($targetImg,$targetImgPath);
break;
case3:
ImagePNG($targetImg,$targetImgPath);
break;
}
ImageDestroy($srcImg);
ImageDestroy($targetImg);
}
else//不超出指定寬高則直接復制
{
($srcImgPath,$targetImgPath);
ImageDestroy($srcImg);
}
}
代碼已經測試,成功運行!

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

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

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

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

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

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

輸出縮略圖文件。

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

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

④ PHP如何把上傳的照片生成高質量的縮略圖

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

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

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

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

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

  4. 輸出縮略圖文件。


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

⑤ 能直接用的PHP生成縮略圖的程序(要求簡單)

<?php
/*構造函數-生成縮略圖+水印,參數說明:
$srcFile-圖片文件名,
$dstFile-另存文件名,
$markwords-水印文字,
$markimage-水印圖片,
$dstW-圖片保存寬度,
$dstH-圖片保存高度,
$rate-圖片保存品質*/
makethumb("a.jpg","b.jpg","50","50");
function makethumb($srcFile,$dstFile,$dstW,$dstH,$rate=100,$markwords=null,$markimage=null)
{
$data = GetImageSize($srcFile);
switch($data[2])
{
case 1:
$im=@ImageCreateFromGIF($srcFile);
break;
case 2:
$im=@ImageCreateFromJPEG($srcFile);
break;
case 3:
$im=@ImageCreateFromPNG($srcFile);
break;
}
if(!$im) return False;
$srcW=ImageSX($im);
$srcH=ImageSY($im);
$dstX=0;
$dstY=0;
if ($srcW*$dstH>$srcH*$dstW)
{
$fdstH = round($srcH*$dstW/$srcW);
$dstY = floor(($dstH-$fdstH)/2);
$fdstW = $dstW;
}
else
{
$fdstW = round($srcW*$dstH/$srcH);
$dstX = floor(($dstW-$fdstW)/2);
$fdstH = $dstH;
}
$ni=ImageCreateTrueColor($dstW,$dstH);
$dstX=($dstX<0)?0:$dstX;
$dstY=($dstX<0)?0:$dstY;
$dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX;
$dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY;
$white = ImageColorAllocate($ni,255,255,255);
$black = ImageColorAllocate($ni,0,0,0);
imagefilledrectangle($ni,0,0,$dstW,$dstH,$white);// 填充背景色
ImageCopyResized($ni,$im,$dstX,$dstY,0,0,$fdstW,$fdstH,$srcW,$srcH);
if($markwords!=null)
{
$markwords=iconv("gb2312","UTF-8",$markwords);
//轉換文字編碼
ImageTTFText($ni,20,30,450,560,$black,"simhei.ttf",$markwords); //寫入文字水印
//參數依次為,文字大小|偏轉度|橫坐標|縱坐標|文字顏色|文字類型|文字內容
}
elseif($markimage!=null)
{
$wimage_data = GetImageSize($markimage);
switch($wimage_data[2])
{
case 1:
$wimage=@ImageCreateFromGIF($markimage);
break;
case 2:
$wimage=@ImageCreateFromJPEG($markimage);
break;
case 3:
$wimage=@ImageCreateFromPNG($markimage);
break;
}
image($ni,$wimage,500,560,0,0,88,31); //寫入圖片水印,水印圖片大小默認為88*31
imagedestroy($wimage);
}
ImageJpeg($ni,$dstFile,$rate);
ImageJpeg($ni,$srcFile,$rate);
imagedestroy($im);
imagedestroy($ni);
}
?>

⑥ 請教php 生成縮略圖問題

生成縮略圖跟游覽器沒關系,上旅逗傳圖片一般調鍵鬧用的就是JS文件,你看看是不是JS有問題。只有JS會出現游覽器的兼容問稿鎮罩題,但是IE都成功了,其他現在主流游覽器也不會不兼容,代碼貼出來LOOK~

⑦ PHP 生成縮略圖的類


PHP代碼
?php
/**
* 功能:生成縮略圖
* 作者:phpox
* 日期:Thu May 17 09:57:05 CST 2007
*/
class CreatMiniature
{
//公共變數
var $srcFile=""; //原圖
var $echoType; //輸出圖片類型,link--不保存咐仔為文件;file--保存為文件
var $im=""; //臨時變數判猜
var $srcW=""; //原圖寬
var $srcH=""; //原圖高
//設置變數及初始化
function SetVar($srcFile,$echoType)
{
if (!file_exists($srcFile)){
echo '源圖片文件不存在!'
exit();
}
$this-srcFile=$srcFile;
$this-echoType=$echoType;
$info = "";
$data = GetImageSize($this-srcFile,$info);
switch ($data[2])
{
case 1:
if(!function_exists("imagecreatefromgif")){
echo "你的GD庫不能使用GIF格式的圖片,請使用Jpeg或PNG格式!a href='javascript:go(-1);'返回/a";
exit();
}
$this-im = ImageCreateFromGIF($this-srcFile);
break;
case 2:
if(!function_exists("imagecreatefromjpeg")){
echo "你的GD庫不能使用jpeg格式的圖片,請掘簡型使用其它格式的圖片!a href='javascript:go(-1);'返回/a";
exit();
}
$this-im = ImageCreateFromJpeg($this-srcFile);
break;
case 3:
$this-im = ImageCreateFromPNG($this-srcFile);
break;
}
$this-srcW=ImageSX($this-im);
$this-srcH=ImageSY($this-im);
}
//生成扭曲型縮圖
function Distortion($toFile,$toW,$toH)
{
$cImg=$this-CreatImage($this-im,$toW,$toH,0,0,0,0,$this-srcW,$this-srcH);
return $this-EchoImage($cImg,$toFile);
ImageDestroy($cImg);
}
//生成按比例縮放的縮圖
function Prorate($toFile,$toW,$toH)
{
$toWH=$toW/$toH;
$srcWH=$this-srcW/$this-srcH;
if($toWH=$srcWH)
{
$ftoW=$toW;
$ftoH=$ftoW*($this-srcH/$this-srcW);
}
else
{
$ftoH=$toH;
$ftoW=$ftoH*($this-srcW/$this-srcH);
}
if($this-srcW$toW||$this-srcH$toH)
{
$cImg=$this-CreatImage($this-im,$ftoW,$ftoH,0,0,0,0,$this-srcW,$this-srcH);
return $this-EchoImage($cImg,$toFile);
ImageDestroy($cImg);
}
else
{
$cImg=$this-CreatImage($this-im,$this-srcW,$this-srcH,0,0,0,0,$this-srcW,$this-srcH);
return $this-EchoImage($cImg,$toFile);
ImageDestroy($cImg);
}
}
//生成最小裁剪後的縮圖
function Cut($toFile,$toW,$toH)
{
$toWH=$toW/$toH;
$srcWH=$this-srcW/$this-srcH;
if($toWH=$srcWH)
{
$ctoH=$toH;
$ctoW=$ctoH*($this-srcW/$this-srcH);
}
else
{
$ctoW=$toW;
$ctoH=$ctoW*($this-srcH/$this-srcW);
}
$allImg=$this-CreatImage($this-im,$ctoW,$ctoH,0,0,0,0,$this-srcW,$this-srcH);
$cImg=$this-CreatImage($allImg,$toW,$toH,0,0,($ctoW-$toW)/2,($ctoH-$toH)/2,$toW,$toH);
return $this-EchoImage($cImg,$toFile);
ImageDestroy($cImg);
ImageDestroy($allImg);
}
//生成背景填充的縮圖
function BackFill($toFile,$toW,$toH,$bk1=255,$bk2=255,$bk3=255)
{
$toWH=$toW/$toH;
$srcWH=$this-srcW/$this-srcH;
if($toWH=$srcWH)
{
$ftoW=$toW;
$ftoH=$ftoW*($this-srcH/$this-srcW);
}
#p#副標題#e#
else
{
$ftoH=$toH;
$ftoW=$ftoH*($this-srcW/$this-srcH);
}
if(function_exists("imagecreatetruecolor"))
{
@$cImg=ImageCreateTrueColor($toW,$toH);
if(!$cImg)
{
$cImg=ImageCreate($toW,$toH);
}
}
else
{
$cImg=ImageCreate($toW,$toH);
}
$backcolor = imagecolorallocate($cImg, $bk1, $bk2, $bk3); //填充的背景顏色
ImageFilledRectangle($cImg,0,0,$toW,$toH,$backcolor);
if($this-srcW$toW||$this-srcH$toH)
{
$proImg=$this-CreatImage($this-im,$ftoW,$ftoH,0,0,0,0,$this-srcW,$this-srcH);
if($ftoW$toW)
{
ImageCopy($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH);
}
else if($ftoH$toH)
{
ImageCopy($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH);
}
else
{
ImageCopy($cImg,$proImg,0,0,0,0,$ftoW,$ftoH);
}
}
else
{
ImageCopyMerge($cImg,$this-im,($toW-$ftoW)/2,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100);
}
return $this-EchoImage($cImg,$toFile);
ImageDestroy($cImg);
}
function CreatImage($img,$creatW,$creatH,$dstX,$dstY,$srcX,$srcY,$srcImgW,$srcImgH)
{
if(function_exists("imagecreatetruecolor"))
{
@$creatImg = ImageCreateTrueColor($creatW,$creatH);
if($creatImg)
ImageCopyResampled($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
else
{
$creatImg=ImageCreate($creatW,$creatH);
ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
}
}
else
{
$creatImg=ImageCreate($creatW,$creatH);
ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
}
return $creatImg;
}
//輸出圖片,link---只輸出,不保存文件。file--保存為文件
function EchoImage($img,$to_File)
{
switch($this-echoType)
{
case "link":
if(function_exists('imagejpeg')) return ImageJpeg($img);
else return ImagePNG($img);
break;
case "file":
if(function_exists('imagejpeg')) return ImageJpeg($img,$to_File);
else return ImagePNG($img,$to_File);
break;
}
}
}
?
#p#副標題#e#

⑧ PHP縮略圖組件的使用

將圖片等比例縮放一下再放到框子里,等比例縮放函數要調用GD庫的函數,縮放函數要自己寫,網上也能搜到

⑨ php創建縮略圖問題

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

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

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

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

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


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

<?php
classThumb{
/**
*@paramstring$image原圖
*@paramstring$thumbname縮略圖文件名
*@paramstring$type圖像格式
*@paramstring$maxWidth寬度
*@paramstring$maxHeight高度
*/
staticcreate($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)){
returnfalse;
}
$srcImg=$createFun($image);

//第二步開始
//創建縮略圖
if($type!='gif'&&function_exists('imagecreatetruecolor'))
$thumbImg=imagecreatetruecolor($width,$height);
else
$thumbImg=imagecreate($width,$height);
//png和gif的透明處理byluofei614
if('png'==$type){
imagealphablending($thumbImg,false);//取消默認的混色模式(為解決陰影為綠色的問題)
imagesavealpha($thumbImg,true);//設定保存完整的alpha通道信息(為解決陰影為綠色的問題)
}elseif('gif'==$type){
$trnprt_indx=imagecolortransparent($srcImg);
if($trnprt_indx>=0){
//itstransparent
$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"))
imageresampled($thumbImg,$srcImg,0,0,0,0,$width,$height,$srcWidth,$srcHeight);
else
imageresized($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;
}
returnfalse;

}

}
?>

你使用的時候直接用:

requireThumb.class.php
$thumb=Thumb::create('s.jpg','thumb_s.jpg',100,50);

希望我的回答你能滿意

⑩ php 上傳圖片 並生成縮略圖

一般悉塌上傳圖片會返回一個上傳圖片的文件名,上傳會指定你滾消的上傳路徑。例如:www/project/Uploads/Images/,用設個路徑+文件名,然後傳入makethumb就ok了,樓主可以去網上看一看thinkPHP的文件上傳類和圖像處理類,官方也有教大陸知程的。

熱點內容
怎麼找回建行登錄密碼 發布:2025-07-18 14:39:38 瀏覽:348
如何讓安卓變得像蘋果一樣快 發布:2025-07-18 14:38:05 瀏覽:216
台安源碼 發布:2025-07-18 14:35:32 瀏覽:601
下載種子怎麼是php 發布:2025-07-18 14:35:00 瀏覽:5
linuxtimet 發布:2025-07-18 14:34:46 瀏覽:299
輕客有哪些安全配置 發布:2025-07-18 14:09:22 瀏覽:409
sql按月份分組 發布:2025-07-18 13:44:01 瀏覽:598
電腦怎麼配置sva 發布:2025-07-18 13:32:06 瀏覽:148
如何找出隱藏的文件夾 發布:2025-07-18 13:19:15 瀏覽:829
釘釘直播腳本 發布:2025-07-18 13:12:10 瀏覽:192