timthumb.php图片缩略图项目使用技巧/WordpressPhp

印迹发布于:2019-2-4 1308

简介

 timthumb.php 是一个缩略图应用项目,为了使主题缩略图内容大小一致,越来越多的主题开始使用 timthumb。但很多使用 timthumb.php 生成缩略图的用户对其参数并不是很了解,本文将主要对 timthumb.php 生成缩略图时所用的各种参数进行详细分析,确保你对 timthumb.php 使用方法有一个足够的了解。

官方地址

官方网址:https://www.binarymoon.co.uk/projects/timthumb/

下载地址:http://code.google.com/p/timthumb/

功能&使用

timthumb.php 有点类似于插件,但是又和 WordPress 插件不同,因为它不是被上传于 plugins 文件夹下,而是需要上传到你的主题文件夹中。你可以在这里了解和下载最新版本的 timthumb.php,一般默认配置也就可以了,如果想进一步优化可以根据需要修改 timthumb.php 里前 30 行的参数

默认情况下 timthumb.php 是不支持外链图片的,需要修改一下 timthumb.php 的参数实现支持外链图片:

define ('ALLOW_EXTERNAL', TRUE);
define ('ALLOW_ALL_EXTERNAL_SITES', TRUE);

timthumb.php 参数是通过 get 方式提交的,可使用的参数及说明如下:

src : 需要进行缩放的源图片地址,或者是需要进行截图操作的网页地址
w : 生成图片的宽度,如果宽度或高度只设置了一个值,则根据其中一个值进行等比缩放
h : 生成图片的高度,如果高度和宽度都没有指定,则默认为 100*100
zc : 生成图片的缩放模式,可选值 0, 1, 2, 3, 默认为 1。0:根据传入的值进行缩放(不裁剪), 1:以最合适的比例裁剪和调整大小(裁剪), 2:按比例调整大小,并添加边框(裁剪),2:按比例调整大小,不添加边框(裁剪)
webshot : 如果此值为真则进行截图操作
q : 生成图片的质量,默认 90
a : 超出部分的裁剪位置,和缩放模式有关,可选值 t, b, l, r, 默认为从顶部裁剪
f : 需要对生成后的图片
使用一些过滤器的话,则在这里设置不同过滤器的代码和值。
s : 是否对生产的图片进行锐化处理
cc : 生成图片的背景画布颜色
ct : 生成 png 图片时背景是否透明

http://www.virplus.com/yourtheme/timthumb.phpsrc=http://www.virplus.com/123.jpg&w=280&h=210&zc=1

优势:网站使用 timthumb.php 生成缩略图后,无需在网站后台进行繁杂的图片裁剪操作即可让网站的图片大小显示一致,便于维护。

劣势:需要主机支持 GD 库,且每次缩略图需要动态生成,无法使用 CDN 缓存,会消耗一定的服务器资源。

使用技巧须知

1、服务器要开启 GD 库。

2、在和 timthumb.php 同一个目录下新建一个 cache 文件夹用来存储生成的小图片,设置 cache 文件夹为 755 或 777 权限。

3、请使用绝对地址来表示原有图片,不支持外链图片。

4、最好将规则写入.htaccess 文件中。可以加快图片速度。如下:

 RewriteEngine on RewriteRule .* – [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}] 
 RewriteRule .* – [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

5、图片的最后一个参数不是质量级别而是压缩级别。我们可以单独修改这个参数达到最大压缩比。

     找到 timthumb.php 文件第 174 行左右 $quality = floor($quality * 0.09); 在下面添加:$quality = 9;

    下面就是结合了 timthumb.php 和 WordPress 自带的缩略图功能,支持站外链接图片,自动缓存图片的可以全自动日志缩略图功能的代码。代码如下:

function post_thumbnail( $width = 100,$height = 80 ){
  global $post;if( has_post_thumbnail() ){ //有缩略图,则显示缩略图
  $timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
  $post_timthumb = '
               <a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php 生成网站缩略图参数及使用技巧详解" >
               <img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成网站缩略图参数及使用技巧详解" /></a>
  post_title.'" class="thumb" />';
    echo $post_timthumb;}
     else{if ($postid<1)$postid = get_the_ID();
     $image = get_post_meta($postid, "image", TRUE); // 调用自定义域图片
  $post_timthumb = '<a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php生成网站缩略图参数及使用技巧详解" >
  <img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />';
  if ($image != null or $image != '') {
    echo $post_timthumb;}
     else {$post_timthumb = '';
     ob_start();ob_end_clean();
     $output = preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $index_matches); //获取日志中第一张图片
  $first_img_src = $index_matches [1]; //获取该图片
   srcif( !empty($first_img_src) )
   { //如果日志中有图片
   $path_parts = pathinfo($first_img_src); //获取图片 src 信息
   $first_img_name = $path_parts["basename"]; //获取图片名
   $first_img_pic = get_bloginfo('wpurl'). '/cache/'.$first_img_name; //文件所在地址
   $first_img_file = ABSPATH. 'cache/'.$first_img_name; //保存地址
   $expired = 604800; //过期时间
  if ( !is_file($first_img_file) || (time() - filemtime($first_img_file))> $expired )
  {
    copy($first_img_src, $first_img_file); //远程获取图片保存于本地
    $post_timthumb = '<a data-fancybox="gallery" href="'.$first_img_src.'"title="Timthumb.php 生成网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.$first_img_src.'" alt="Timthumb.php 生成网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />'; //保存时用原图显示
  }
  $post_timthumb = '<a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php 生成网站缩略图参数及使用技巧详解" >
  <img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />';
  } else {   //如果日志中没有图片,则显示默认
   $post_timthumb = '<a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php 生成网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />';
   }
  echo $post_timthumb;}
  }}

把上述代码放在 functions.php 里,然后再用

<php post_thumbnail( 100,100 );>

    这样调用即可,其中的$width 和 $height 为得到的裁剪图片的大小。上述代码意思是如果文章有 wordpress 自带缩略图,则调用自带缩略图,没有的话则调用自定义域“image”图片作为缩略图,再没有的话就自动截取文章第一张图做为缩略图,如果连图片都没有的话,那就显示一张默认图片。

timthumb 常见问答

1.timthumb 只对要作为缩略图的那个图片进行裁剪,并且是在有访问请求时才临时处理生成,生成的是一个配置文件,不存在真正的缩略图文件,在一定的时间内会缓存在空间中,失效后,有访问请求会重新生成。特点是,不会生成多余的缩略图,但是处理过程需要一定的服务器资源支持。

2.听说 timthumb 以前有漏洞,现在不放心?

任何程序都会存在漏洞,但是最新版本已经算是比较安全了,我只能说,如果你担心,那就不要用。

注意:如果你的图片域名解析出现问题。“timthumb 文件大概 126 行的地方有: $ALLOWED_SITES = array 添加那个外部图片的顶级域名就可以了。

如果不想用 Timthumb.php 来生成缩略图的话,可以试试七牛的缩略图裁剪:

没听过七牛?太 low 了吧:免费 10g/月图片流量,最好用的 wordpress 图床

分隔符使用方法: http://绑定域名/文件名称 + 分隔符 + 处理样式名,这不用解释了吧?

官方下载地址:

http://code.google.com/p/timthumb/

http://www.virplus.com/thread-70.htm

转载请注明:2019-2-4 于 VirPlus 发表

推荐阅读
最新回复 (0)

    ( 登录 ) 后,可以发表评论!

    返回