当前位置:首页 » 编程语言 » 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的文件上传类和图像处理类,官方也有教大陆知程的。

热点内容
ftp命令使用 发布:2025-07-18 18:13:05 浏览:45
办税密码是什么 发布:2025-07-18 18:12:32 浏览:487
linuxftp文件下载 发布:2025-07-18 18:12:30 浏览:941
互联网网站服务器搭建 发布:2025-07-18 18:01:06 浏览:478
安卓手机怎么辫真伪 发布:2025-07-18 17:13:14 浏览:186
java后台json 发布:2025-07-18 17:12:21 浏览:680
手机游戏配置主要看哪些 发布:2025-07-18 17:00:47 浏览:148
微课源码 发布:2025-07-18 16:34:44 浏览:1001
压缩长抱枕 发布:2025-07-18 16:13:38 浏览:505
如何使用wifi热点配置网络 发布:2025-07-18 16:06:25 浏览:970