php生成缩略图的例子

 更新时间:2016年11月25日 15:41  点击:1658
生成缩略图是一个网站常会使用到的一个功能了,像很多图片站我们列表页面的图片与详情页面大小是不一样的,下面我就来给大家介绍一个生成缩略图的php源码,希望对各位有帮助。

最近的一个网站项目中上传图片需要生成缩略图,以减小列表页的大小,减缓服务器压力。一向崇尚简洁明了和实用的我,看到网上搜到的一个个长长的php缩略图类的时候,感到非常痛苦。我承认他们写的功能是强大一些,但是我不需要这么复杂的功能。

于是翻了一下手册,弄懂几个函数后自己写了一个简单的php生成缩略图的程序。没有用类,我觉得一个函数就能搞定,而且对于新手来说更容易去理解,从而可以帮助到更多的人。

支持按比分比缩略,支持按指定的长宽缩略,默认按百分比。程序中注释已经很详细了,如有问题可在下面留言,欢迎与我交流。

php生成缩略图的源码例子

源码如下:

<?php
 
 /*
  * param ori_img 原图像的名称和路径
  * param new_img 生成图像的名称
  * param percent 表示按照原图的百分比进行缩略,此项为空时默认按50%
  * param width 指定缩略后的宽度
  * param height 指定缩略后的高度
  *
  * 注:当 percent width height 都传入值的时候,且percent>0时,优先按照百分比进行缩略
  * 温馨提示:使用此功能要在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);
  imagecopyresized($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%的缩略图(参数都填时,百分率优先级大)
 
?>

 

文章有两个正则匹配图片的例子,头一个是获取文章中所有图片地址出来,第二个例子就是只要以http,https打开的图片地址,第二个例子多半用来采集远程图片,第一个例子多半用来获取字符串中图片地址或提取第一张图片。

例子1 获取字符串中所有图片

<?php
$str='<p><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>';
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/";
preg_match_all($pattern,$str,$match);
print_r($match);
?>

结果显示:

Array
(
[0] => Array
(
[0] => <img border=”0″ src=”upfiles/2009/07/1246430143_1.jpg” alt=””/>
)

[1] => Array
(
[0] => upfiles/2009/07/1246430143_1.jpg
)

)

盒例子2,这个函数是提取站外以http,https

/**
* 提取字符串中图片url地址
* @param type $str
* @return type
*/
function getimgs($str) {
    $reg = '/((http|https):\/\/)+(\w+\.)+(\w+)[\w\/\.\-]*(jpg|gif|png)/';
    $matches = array();
    preg_match_all($reg, $str, $matches);
    foreach ($matches[0] as $value) {
        $data[] = get_file($value);
    }
    return $data;
}

在php中系统为我们内置了一个html标签清除函数strip_tags它删除的是所有字符串了,如果我们只要删除指定的就没有办法了,下面我就来给大家整理了一个站长写的自定义删除html标签函数。


例子

 代码如下 复制代码

 <?php
 function strip_selected_tags($text, $tags = array())
   {
       $args = func_get_args();
       $text = array_shift($args);
       $tags = func_num_args() > 2 ? array_diff($args,array($text))  : (array)$tags;
       foreach ($tags as $tag){
           if(preg_match_all('/<'.$tag.'[^>]*>(.*)</'.$tag.'>/iU', $text, $found)){
               $text = str_replace($found[0],$found[1],$text);
         }
       }       return $text;
   }
?>

这个函数很短,但它实现的功能很实用,第一个参数是原字符串,第二个参数是要删除的HTML的标签数组,如果要删除<a>和<p>标签,只需要使用下面的代码:

 代码如下 复制代码

 <?php
$tags = array();
$tags[0]='a';
$tags[1]='p';
 $str = "<a href=http://www.111cn.net>link</a><p>help</p>";
echo strip_selected_tags($str,$tags);
?>

是不是很简单呢?

以前有介绍过一个删除指定目录下的指定文件下面我们来看删除指定目录所的所有文件只删除一级目录不删除下级目录,具体程序例子如下。


例子

public function del(){
    header("Content-Type: text/html; charset=UTF-8");
    echo '点击文件名可以查看:<br>';
    $dir =getcwd()."/html/";
    //获取某目录下所有文件、目录名(不包括子目录下文件、目录名)
    $handler = opendir($dir);
    while (($filename = readdir($handler)) !== false) {//务必使用!==,防止目录下出现类似文件名“0”等情况
        if ($filename != "." && $filename != "..") {
                $files[] = $filename ;
           }
       }
   
    closedir($handler);
     
//打印所有文件名
foreach ($files as $value) {
    $url = 'http://'.$_SERVER['HTTP_HOST']."/html/".$value;
    echo "<a href='".$url."' target='_blank'>".$value."</a> | <a href='/index.php?s=/Index1/dodel/name/".$value."' target='_self'>删除</a><br />";
}
    
 
}
 
 
public function dodel(){
    header("Content-Type: text/html; charset=UTF-8");
    $fname = $this->_get("name");
    $fname = getcwd()."/html/".$fname.".html";
    if(unlink($fname)){
        
        echo $fname.' 文件删除成功!<a href="javascript:history.go(-1);">返回</a>'; 
    }else{
        echo $fname.' 删除失败!<a href="javascript:history.go(-1);">返回</a>';
    }
}


获取目录下所有文件,包括子目录

 代码如下 复制代码
function get_allfiles($path,&$files) {
    if(is_dir($path)){
        $dp = dir($path);
        while ($file = $dp ->read()){
            if($file !="." && $file !=".."){
                get_allfiles($path."/".$file, $files);
            }
        }
        $dp ->close();
    }
    if(is_file($path)){
        $files[] =  $path;
    }
}
   
function get_filenamesbydir($dir){
    $files =  array();
    get_allfiles($dir,$files);
    return $files;
}
   
$filenames = get_filenamesbydir("static/image/");
//打印所有文件名,包括路径
foreach ($filenames as $value) {
    echo $value."<br />";
}


php删除文件夹及其文件夹下所有文件

 代码如下 复制代码
function deldir($dir) {
  //先删除目录下的文件:
  $dh=opendir($dir);
  while ($file=readdir($dh)) {
    if($file!="." && $file!="..") {
      $fullpath=$dir."/".$file;
      if(!is_dir($fullpath)) {
          unlink($fullpath);
      } else {
          deldir($fullpath);
      }
    }
  }
 
  closedir($dh);
  //删除当前文件夹:
  if(rmdir($dir)) {
    return true;
  } else {
    return false;
  }
}
这是一个比较实现的函数我们可以自定义要删除那些目录保存在一个数据中,然后我们根据数据进行遍历并且删除目录下指定文件了,具体代码如下。

直接上代码:

下面的例子我们是以删除指定目录的html为例子哦,如果你要其它文件我们只要把html改成你自己要删除的后缀名就可以了。

 代码如下 复制代码
<?php
$lanmu = array("action","tiyu","yizhi","sheji","gaoxiao","maoxian","qipai","celue","minjie","xiuxian","ertong","jingying","webgame");
foreach($lanmu as $v2){
    $mstdel[] =glob(getcwd().DIRECTORY_SEPARATOR.$v2.DIRECTORY_SEPARATOR.'[1-9]*.html');
}
 
//var_dump($mstdel);
 
//var_dump(count($mstdel));
$i=0;
foreach($mstdel as $val){
    foreach($val as $val2){
        //echo $val2."<Br>";
        if(unlink($val2)) $i++;
        //$countval2[] = $val2;
    }
}
 
echo 'del success: '.$i;
 
//echo count($countval2);
//var_dump(glob(getcwd().DIRECTORY_SEPARATOR.'sheji'.DIRECTORY_SEPARATOR.'[1-9]*.html'));
//var_dump(glob('./sheji/[1-9]*.html'));
//var_dump(glob('./sheji/[^index]*.html'));
 
 
//array_walk(glob(getcwd().'/sheji/[1-9]*.html'),'unlink');
//array_walk(glob('./sheji/[1-9]*.html'),'unlink');
//array_walk(glob(getcwd().DIRECTORY_SEPARATOR.'sheji'.DIRECTORY_SEPARATOR.'[1-9]*.html'),'unlink');
//var_dump(DIRECTORY_SEPARATOR);
//var_dump(unlink('D:shanmaowwwwwwroottiantangtvxyxh4cc/sheji/20312.html'));
?>
[!--infotagslink--]

相关文章

  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php生成唯一数字id的方法汇总

    关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • PHP自动生成后台导航网址的最佳方法

    经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
  • c#生成高清缩略图的二个示例分享

    这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • PHP生成不同颜色、不同大小的tag标签函数

    复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
  • JS生成某个范围的随机数【四种情况详解】

    下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
  • php中利用str_pad函数生成数字递增形式的产品编号

    解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
  • C#生成Word文档代码示例

    这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
  • Vue组件文档生成工具库的方法

    本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
  • PHP简单实现生成txt文件到指定目录的方法

    这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
  • PHP批量生成图片缩略图(1/5)

    这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
  • C#实现为一张大尺寸图片创建缩略图的方法

    这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
  • 史上最简洁C# 生成条形码图片思路及示例分享

    这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
  • php 上传文件并生成缩略图代码

    if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
  • 简单入门级php 生成xml文档代码

    $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25