php自动生成缩略图代码

发布网友 发布时间:2022-04-06 04:23

我来回答

3个回答

懂视网 时间:2022-04-06 08:45

php生成缩略图的方法:首先创建一个PHP示例文件;然后通过“header("content-type:image/png");”设定生成图片格式;最后通过“image_resize”方法按指定大小生成缩略图即可。

推荐:《PHP视频教程》

PHP生成图片缩略图的三种方法:

1、把大图缩略到缩略图指定的范围内,可能有留白(原图细节不丢失)

2、把大图缩略到缩略图指定的范围内,不留白(原图会居中缩放,把超出的部分裁剪掉)

3、把大图缩略到缩略图指定的范围内,不留白(原图会剪切掉不符合比例的右边和下边)

下面是代码:

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

热心网友 时间:2022-04-06 05:53

给你个函数吧
// *****生成缩略图*****
// 只考虑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 //不超出指定宽高则直接复制
{
copy($srcImgPath,$targetImgPath);
ImageDestroy($srcImg);
}
}
代码已经测试,成功运行!

热心网友 时间:2022-04-06 07:11

从thinkphp那里拿

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com