php縮略圖函數
① php生產縮略圖的問題,我生成的都是黑圖
給你一個函數,造著用就成了:
<?php
/*
AUTHOR: Yufeng
DATE: 2008-5-4
FUNCTION:Create Smaller Picture
$x 寬 $y 高
*/
function CREATE_SmallImage($path,$imageName,$x,$y){ # 生成縮略圖函數
$ImgTypeArr = array("1"=>"gif","2"=>"jpeg","3"=>"png","6"=>"wbmp");
$extent = explode(".",$imageName);
$num = count($extent);
$new_Name = $extent[$num-2]."_thumb.".$extent[$num-1];
if(file_exists($path.$new_Name))
return $path.$new_Name;
else
$image_info = getimagesize($path.$imageName);
$image2_be = "imagecreatefrom".$ImgTypeArr[$image_info[2]];
$image2 = @$image2_be($path.$imageName);
if(!$image2){
return $path.$imageName;
exit;
}
$image1 = imagecreate($x,$y);
$image_x = imageSX($image2);
$image_y = imageSY($image2);
imageresized($image1,$image2,0,0,0,0,$x,$y,$image_x,$image_y);
$image_endBe = "image".$ImgTypeArr[$image_info[2]];
if(!@$image_endBe($image1,$path.$new_Name)){
return $path.$imageName;
exit;
}
return $path.$new_Name; # 返回生成的縮略圖的路徑
}
echo CREATE_SmallImage("image/","guo11.jpg",98,54);
?>
② 求大神解釋下面php縮略圖代碼的詳細功能邏輯
1. 功能邏輯:
獲取原圖片大小 - 與設定的最大寬度、高度比較 - 得出圖像的縮放比例 - 根據縮放比例,算出生成縮略圖的新長寬數值 - 使用imageresampled或是imageresized函數最終生成圖像
2. 想改為縮略圖不變形該如何改?
如果想使縮略圖不變形,最重要的一點是等比縮放,也就是長度和寬度的縮放比例要一樣。
最簡便的辦法是修改以下兩句:
imageresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);
imageresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);
$width, $height 這兩個參數保證與 $srcWidth,$srcHeight 同比就行了。
③ php上傳圖片生成三張縮略圖,大中小。幫忙看一下
public function disposeImgAction($tmp_path, $dst_w, $file_path, $file_name)
{
$arr=getimagesize($tmp_path);
$src_w=$arr[0];
$src_h=$arr[1];
$type=$arr[2];
switch($type){
case 1:$src_im=imagecreatefromgif($tmp_path);break;
case 2:$src_im=imagecreatefromjpeg($tmp_path);break;
case 3:$src_im=imagecreatefrompng($tmp_path);break;
default:UtlsSvc::showMsg('不支持該圖片類型','/coinproct/index/');
}
if ($dst_w == 500) {
$dst_h = 385;
} elseif ($dst_w == 300) {
$dst_h = 225;
} elseif ($dst_w == 100) {
$dst_h = 75;
}
$dst_im=imagecreatetruecolor($dst_w,$dst_h);
imageresized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
imagejpeg($dst_im, $file_path.'/'.$file_name);
}
這是我自己寫的一個函數 第一個是上傳的文件臨時目錄 第二個是 縮略後的寬度 裡面你可以自己計算高度的比例 第三個是存到什麼目錄 第四個是文件名
④ PHP縮略圖組件的使用
將圖片等比例縮放一下再放到框子里,等比例縮放函數要調用GD庫的函數,縮放函數要自己寫,網上也能搜到
⑤ 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=($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) {
case 1:
ImageGIF($targetImg,$targetImgPath);
break;
case 2:
ImageJpeg($targetImg,$targetImgPath);
break;
case 3:
ImagePNG($targetImg,$targetImgPath);
break;
}
ImageDestroy($srcImg);
ImageDestroy($targetImg);
}
else //不超出指定寬高則直接復制
{
($srcImgPath,$targetImgPath);
ImageDestroy($srcImg);
}
}
代碼已經測試,成功運行!
⑥ php按百分比生成縮略圖的代碼分享
於是翻了一下手冊,弄懂幾個函數後自己寫了一個簡單的php生成縮略圖的程序。沒有用類,我覺得一個函數就能搞定,而且對於新手來說更容易去理解,從而可以幫助到更多的人。
支持按比分比縮略,支持按指定的長寬縮略,默認按百分比。程序中注釋已經很詳細了,如有問題可在下面留言,歡迎與我交流。
源碼如下:
復制代碼
代碼如下:
<?php
/*
*
param
ori_img
原圖像的名稱和路徑
*
param
new_img
生成圖像的名稱
*
param
percent
表示按照原圖的百分比進行縮略,此項為空時默認按50%
*
param
width
指定縮略後的寬度
*
param
height
指定縮略後的高度
*
*
註:當
percent
width
height
都傳入值的時候,且percent>0時,優先按照百分比進行縮略
*
by:http://www.jb51.net
更多源碼與你分享
*
溫馨提示:使用此功能要在php.ini中開啟
gd2
*
**/
function
makeThumb($ori_img,
$new_img,
$percent=50,
$width=0,
$height=0){
$original
=
getimagesize($ori_img); //得到圖片的信息,可以print_r($original)發現它就是一個數組
//$original[2]是圖片類型,其中1表示gif、2表示jpg、3表示png
switch($original[2]){
case
1
:
$s_original
=
imagecreatefromgif($ori_img);
break;
case
2
:
$s_original
=
imagecreatefromjpeg($ori_img);
break;
case
3
:
$s_original
=
imagecreatefrompng($ori_img);
break;
}
if($percent
>
0){
$width
=
$original[0]
*
$percent
/
100;
$width
=
($width
>
0)
?
$width
:
1;
$height
=
$original[1]
*
$percent
/
100;
$height
=
($height
>
0)
?
$height
:
1;
}
//創建一個真彩的畫布
$canvas
=
imagecreatetruecolor($width,$height);
imageresized($canvas,
$s_original,
0,
0,
0,
0,
$width,
$height,
$original[0],
$original[1]);
//header("Content-type:image/jpeg");
//imagejpeg($canvas); //向瀏覽器輸出圖片
$loop
=
imagejpeg($canvas,
$new_img); //生成新的圖片
if($loop){
echo
"OK!<br/>";
}
}
makeThumb("bhsj.jpg","suolue1.jpg",15,0,0); //生成原圖15%的縮略圖
makeThumb("bhsj.jpg","suolue2.jpg",0,200,120); //生成寬為100px,高為60px的縮略圖
makeThumb("bhsj.jpg","suolue3.jpg",15,200,120); //生成原圖15%的縮略圖(參數都填時,百分率優先順序大)
?>
⑦ 能直接用的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縮略圖程序
Warning: imagedestroy() expects parameter 1 to be resource
看錯誤提示應可能是 $rs_al["zp"] 空值或輸出的圖片路徑不正確
if(empty ($rs_al["zp"])){
echo '空值!';
}elseif(!file_exists($rs_al["zp"])){
echo '文件不存在或路徑不正確';
}else{
$thumb -> Createthumb($rs_al["zp"]);
}