php利用GD库生成缩略图示例

经典的PHP缩略图生成程式,基于GD库,可指定生成路径及生成目标的宽高细节 使用方法: 在支持GD库的PHP环境中,将以下代码另存为resize.php测试 

还是老规矩,直接上代码

本文实例讲述了PHP基于GD库实现的生成图片缩略图函数。分享给大家供大家参考,具体如下:

<?php
$filename = 'images/1.jpg';
if ($fileInfo = getimagesize($filename)) {
    list($src_w, $src_h) = $fileInfo;
} else {
    exit('文件不是真实图片');
}
$dst_w = 300;
$dst_h = 600;
$ratio_orig = $src_w / $src_h;
if ($dst_w / $dst_h > $ratio_orig) {
    $dst_w = $dst_h * $ratio_orig;
} else {
    $dst_h = $dst_w / $ratio_orig;
}

$src_image = imagecreatefromjpeg($filename);
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
imagepng($dst_image, 'images/test_thumb.jpg');
imagedestroy($src_image);
imagedestroy($dst_image);

?>

php利用GD库生成缩略图。

经典的PHP缩略图生成程式,基于GD库,可指定生成路径及生成目标的宽高细节 

<?php
/**
 * 缩略图生成类,使用示例:
 */

$newimage=new ImageResize();
$newimage->resize("tu.jpg","tu_lit.jpg",1000,1000);
echo $newimage->GetLastError();

class ImageResize{
  private $localimage;//原图路径
  private $remoteimage;//缩略图保存路径
  private $localinfo;//原图属性
  private $error;

  function resize($localimg, $remoteimg, $x, $y) {
    //检测是否支持gd图像处理
    if(!$this->_checkenv()){
      return false;
    }
    $this->localimage = $localimg;
    $this->remoteimage = $remoteimg;
    $this->localinfo = getimagesize($this->localimage); //获取本地图像的信息
    return $this->_resize($x,$y);
  }
  /**
   * 检测当前环境是否支持GD
   */
  private function _checkenv(){
    if(!function_exists('gd_info')){
      $this->error[]="当前环境不支持GD图像处理,请先安装GD库并开启PHP相关扩展";
      return false;
    }
    return true;
  }

  /**
   * 生成缩略图主函数
   * @param int $x 指定的缩略图宽度
   * @param int $y 指定的缩略图高度
   * @return boolean
   */
  private function _resize($x,$y){
    if(!$this->localinfo){
      $this->error[]="本地图像文件不存在";
      return false;
    }
    //创建图像句柄
    $im=@$this->_create($this->localinfo[2]);
    if(!$im){
      $this->error[]="当前GD库不支持图像类型:{$this->localinfo['mime']}";
      return false;
    }
    $dstsize=$this->_dstsize($x, $y);
    $dstim=@imagecreatetruecolor($dstsize["width"],$dstsize["height"]);
    $whitecolor=@imagecolorallocatealpha($dstim, 0, 0, 0,127);
    imagefill($dstim,0,0,$whitecolor);
    $re=@imagecopyresampled($dstim, $im, 0, 0, 0, 0, $dstsize["width"], $dstsize["height"], $this->localinfo[0], $this->localinfo[1]);
    if(!$re){
      $this->error[]="图像重新采样失败";
      return false;
    }
    if(!imagejpeg($dstim, $this->remoteimage)){
      if(!imagepng($dstim,$this->remoteimage)){
        if(!imagegif($dstim,$this->remoteimage)){
          $this->error[]="保存缩略图到{$this->remoteimage}失败,请检查gd环境是否正常和缩略图文件夹的写入权限。";
          return false;
        }
      }
    }
    $this->error[]="success";
    return true;
  }

  /**
   * 根据本地图片类型,创建图片资源
   * @param 图像类型代码 $code
   * @return resource/boolean 成功则返回resourse失败则返回false
   */
  private function _create($code){
    $src=$this->localimage;
    switch ($code){
      case 1:
        return imagecreatefromgif($src);
        break;
      case 2:
        return imagecreatefromjpeg($src);
        break;
      case 3:
        return imagecreatefrompng($src);
        break;
      default :
        return false;
        break;
    }
  }

  /**
   * 按比例计算合适的宽度
   * @param int $x 指定的缩略图宽度
   * @param int $y 指定的缩略图高度
   * @return array 包含调整后的缩略图宽度和高度
   */
  private function _dstsize($x,$y){
    list($srcwidth,$srcheight)=$this->localinfo;
    if(($srcwidth/$srcheight)<($x/$y)){
      $x=floor($y*$srcwidth/$srcheight);
    }else{
      $y=floor($x*$srcheight/$srcwidth);
    }
    $dstsize["width"]=$x;
    $dstsize["height"]=$y;
    return $dstsize;
  }


  /**
   * 获取最后一条错误信息
   * return string
   */
  function GetLastError(){
    return array_pop($this->error);
  }

  /**
   * 获取所有错误信息
   * return array
   */
  function GetAllError(){
    return $this->error;
  }
}
<?php
/**
 * 生成缩略图函数(支持图片格式:gif、jpeg、png和bmp)
 * @author ruxing.li
 * @param string $src   源图片路径
 * @param int  $width  缩略图宽度(只指定高度时进行等比缩放)
 * @param int  $width  缩略图高度(只指定宽度时进行等比缩放)
 * @param string $filename 保存路径(不指定时直接输出到浏览器)
 * @return bool
 */
function mkThumbnail($src, $width = null, $height = null, $filename = null) {
  if (!isset($width) && !isset($height))
    return false;
  if (isset($width) && $width <= 0)
    return false;
  if (isset($height) && $height <= 0)
    return false;
  $size = getimagesize($src);
  if (!$size)
    return false;
  list($src_w, $src_h, $src_type) = $size;
  $src_mime = $size['mime'];
  switch($src_type) {
    case 1 :
      $img_type = 'gif';
      break;
    case 2 :
      $img_type = 'jpeg';
      break;
    case 3 :
      $img_type = 'png';
      break;
    case 15 :
      $img_type = 'wbmp';
      break;
    default :
      return false;
  }
  if (!isset($width))
    $width = $src_w * ($height / $src_h);
  if (!isset($height))
    $height = $src_h * ($width / $src_w);
  $imagecreatefunc = 'imagecreatefrom' . $img_type;
  $src_img = $imagecreatefunc($src);
  $dest_img = imagecreatetruecolor($width, $height);
  imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $width, $height, $src_w, $src_h);
  $imagefunc = 'image' . $img_type;
  if ($filename) {
    $imagefunc($dest_img, $filename);
  } else {
    header('Content-Type: ' . $src_mime);
    $imagefunc($dest_img);
  }
  imagedestroy($src_img);
  imagedestroy($dest_img);
  return true;
}
$result = mkThumbnail('./IMG_3324.JPG', 147, 147);

优化

复制代码 代码如下:

使用方法: 在支持GD库的PHP环境中,将以下代码另存为resize.php测试  

您可能感兴趣的文章:

  • PHP
    GD库生成图像的几个函数总结
  • php实现的支持imagemagick及gd库两种处理的缩略图生成类
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • PHP用GD库生成高质量的缩略图片
  • php的GD库imagettftext函数解决中文乱码问题
  • 可定制的PHP缩略图生成程式(需要GD库支持)
  • PHP5中GD库生成图形验证码(有汉字)
  • PHP中使用GD库创建圆形饼图的例子
  • PHP中使用GD库绘制折线图
    折线统计图的绘制方法
  • php
    使用GD库为页面增加水印示例代码
  • php利用GD库生成缩略图示例
  • php中使用gd库实现下载网页中所有图片
  • PHP基于GD库的图像处理方法小结

注:记得先打开 GD 库的支持

适应不同格式的图片

<?php
$filename = 'images/miao.gif';
if ($fileInfo = getimagesize($filename)) {
    list($src_w, $src_h) = $fileInfo;
    $mime = $fileInfo['mime'];//image/gif image/jpeg
} else {
    exit("文件不是真实图片");
}
//imagecreatefromjpeg imagecreatefromgif imagecreatefrompng
$createFun = str_replace('/', 'createfrom', $mime);
//imagejpeg imagepng imagegif
$outFun = str_replace('/', null, $mime);
$dst_w = 300;
$dst_h = 600;
$ratio_orig = $src_w / $src_h;
if ($dst_w / $dst_h > $ratio_orig) {
    $dst_w = $dst_h * $ratio_orig;
} else {
    $dst_h = $dst_w / $ratio_orig;
}

$src_image = $createFun($filename);
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
$outFun($dst_image, 'images/test1_thumb.jpg');
imagedestroy($src_image);
imagedestroy($dst_image);

?>

<form method=”post” action=”suo_do.php”
enctype=”multipart/form-data”>
<input type=”file” name=”pic” />
<input type=”submit” value=”上传1″ />
</form>
<?php
header(“content-type:text/html;charset=gbk”);
ini_set(“date.timezone”,”Asia/chong”);
//判断文件是否为空
if(empty($_FILES)){
echo”上传文件过大”;
exit;
}
//判断文件上传是否有错误
if($_FILES[‘pic’][‘error’]){
echo “上传文件”;
exit;
}
//判断文件类型是否非法获取文件后缀
$allowtype=array(“jpg”,”png”,”jpeg”,”gif”);
$a=explode(‘.’,$_FILES[‘pic’][‘name’]);
$index=count($a)-1;
$ex=strtolower($a[$index]);
if(!in_array($ex,$allowtype)){
echo “上传文件非法”;
exit;
}
$file=date(‘YmdHis’).rand().”.”.$ex;
$src=$_FILES[‘pic’][‘tmp_name’];
$des=”upload/”.$file;
$rs=move_uploaded_file($src,$des);

复制代码 代码如下:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

//缩略图
//读取已经上传图片
$image=imagecreatefromjpeg($des);
$a=getimagesize($des);
$w=$a[0];
$h=$a[1];
if($w>$h){
$width=300;
$height=$width/$w*$h;
}else if($w<$h){
$height=300;
$width=$height/$h*$w;
}else{
$width=300;
$height=300;
}
//创建空白新图片
$newimage=imagecreatetruecolor($width, $height);
//copy源图片内容 copy新图片
imagecopyresized($newimage, $image, 0,0, 0,0, $width, $height, $w,
$h);
$filename=”upload/s_”.$file;
imagejpeg($newimage,$filename);

<? 

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP
    GD库生成图像的几个函数总结
  • php实现的支持imagemagick及gd库两种处理的缩略图生成类
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • PHP用GD库生成高质量的缩略图片
  • php的GD库imagettftext函数解决中文乱码问题
  • 可定制的PHP缩略图生成程式(需要GD库支持)
  • PHP5中GD库生成图形验证码(有汉字)
  • PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
  • PHP中使用GD库创建圆形饼图的例子
  • PHP中使用GD库绘制折线图
    折线统计图的绘制方法
  • php
    使用GD库为页面增加水印示例代码
  • php中使用gd库实现下载网页中所有图片
  • PHP基于GD库的图像处理方法小结

$FILENAME=”image_name”; 

您可能感兴趣的文章:

  • php使用高斯算法实现图片的模糊处理功能示例
  • php生成条形码的图片的实例详解
  • PHP实现随机生成水印图片功能
  • PHP生成图片验证码功能示例
  • PHP生成图片缩略图类示例
  • php生成二维码图片方法汇总
  • php解析base64数据生成图片的方法
  • PHP使用内置函数生成图片的方法详解
  • PHP
    Imagick完美实现图片裁切、生成缩略图、添加水印
  • php 生成文字png图片的代码
  • 使用PHP生成图片的缩略图的方法
  • PHP实现生成模糊图片的方法示例

// 生成图片的宽度 
$RESIZEWIDTH=400; 

// 生成图片的高度 
$RESIZEHEIGHT=400; 

//生成图片的路径 
$uploaddir=”c:/winnt/temp”; 

function ResizeImage($im,$maxwidth,$maxheight,$name){ 
global $uploaddir; 
$width = imagesx($im); 
$height = imagesy($im); 
if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){ 
if($maxwidth && $width > $maxwidth){ 
$widthratio = $maxwidth/$width; 
$RESIZEWIDTH=true; 

if($maxheight && $height > $maxheight){ 
$heightratio = $maxheight/$height; 
$RESIZEHEIGHT=true; 

if($RESIZEWIDTH && $RESIZEHEIGHT){ 
if($widthratio < $heightratio){ 
$ratio = $widthratio; 
}else{ 
$ratio = $heightratio; 

}elseif($RESIZEWIDTH){ 
$ratio = $widthratio; 
}elseif($RESIZEHEIGHT){ 
$ratio = $heightratio; 

$newwidth = $width * $ratio; 
$newheight = $height * $ratio; 
if(function_exists(“imagecopyresampled”)){ 
$newim = imagecreatetruecolor($newwidth, $newheight); 
imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
}else{ 
$newim = imagecreate($newwidth, $newheight); 
imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

ImageJpeg ($newim,$uploaddir.$name . “.jpg”); 
ImageDestroy ($newim); 
}else{ 
ImageJpeg ($im,$uploaddir.$name . “.jpg”); 

if($_FILES[‘image’][‘size’]){ 
if($_FILES[‘image’][‘type’] == “image/pjpeg”){ 
$im = imagecreatefromjpeg($_FILES[‘image’][‘tmp_name’]); 
}elseif($_FILES[‘image’][‘type’] == “image/x-png”){ 
$im = imagecreatefrompng($_FILES[‘image’][‘tmp_name’]); 
}elseif($_FILES[‘image’][‘type’] == “image/gif”){ 
$im = imagecreatefromgif($_FILES[‘image’][‘tmp_name’]); 

if($im){ 
if(file_exists(“$FILENAME.jpg”)){ 
unlink(“$FILENAME.jpg”); 

ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$FILENAME); 
ImageDestroy ($im); 


?> 

<img src=”<? echo($FILENAME.”.jpg?reload=”.rand(0,999999)); ?>”><br><br> 

<form enctype=”multipart/form-data” method=”post”> 
<br> 
<input type=”file” name=”image” size=”50″ value=”浏览”><p> 
<input type=”submit” value=”上传图片”> 
</form>  

</body> 
</html>

您可能感兴趣的文章:

  • PHP
    GD库生成图像的几个函数总结
  • php实现的支持imagemagick及gd库两种处理的缩略图生成类
  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
  • PHP用GD库生成高质量的缩略图片
  • php的GD库imagettftext函数解决中文乱码问题
  • PHP5中GD库生成图形验证码(有汉字)
  • PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
  • PHP中使用GD库创建圆形饼图的例子
  • PHP中使用GD库绘制折线图
    折线统计图的绘制方法
  • php
    使用GD库为页面增加水印示例代码
  • php利用GD库生成缩略图示例
  • php中使用gd库实现下载网页中所有图片
  • PHP基于GD库的图像处理方法小结

相关文章