^ 回到顶部
  • 人生没有定律,每个人都有自己的节奏
  • 若文中代码有问题,可能是少了几个问号,留言一定会解决!
  • 希望你的坚持,都是因为热爱,而不是因为不甘心
  • 站点文章结尾新增了赞赏通道
  • 那些不愿意让你吃亏的人,才是真正值得你深交的人,也是值得你付出时间的人

Timthumb.php生成WordPress网站缩略图参数及使用技巧详解

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

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.yousite.com/wp-content/themes/yourtheme/timthumb.phpsrc=http://www.yousite.com/123.jpg&w=280&h=210&zc=1

在 WordPress 上使用 timthumb.php 生成缩略图一般只需要用到 src、w、h、zc 四个参数,其他参数使用默认值即可。上面是使用 timthumb.php 生成缩略图的一个例子,你可以根据自己的实际需要对参数进行修改或者增加其他参数。

timthumb.php 优势:

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

timthumb.php 劣势:

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

timthumb 使用技巧须知

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 生成 WordPress 网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" /></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 生成 WordPress 网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" /></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]; //获取该图片 src
if( !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 生成 WordPress 网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.$first_img_src.'" alt="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />'; //保存时用原图显示
}
$post_timthumb = '<a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />';
} else { //如果日志中没有图片,则显示默认
$post_timthumb = '<a data-fancybox="gallery" href="'.get_bloginfo("title="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" ><img class="aligncenter size-full wp-image" src="'.get_bloginfo(" alt="Timthumb.php 生成 WordPress 网站缩略图参数及使用技巧详解" /></a>post_title.'" class="thumb" />';
}
echo $post_timthumb;
}
}}

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

<php post_thumbnail( 100,100 );>

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

timthumb 常见问答

1.WordPress 本身就有截取缩略图的功能,为什么要使用 timthumb 呢?

WordPress 本身的缩略图截取功能,会对上传的任何图片都进行裁剪,每个图片都删除缩略图保存在空间中,特点是,图片只生成一次,需要调用是不会再次生成,但是有很多缩略图根本用不到,占用空间。

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

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

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

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

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

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

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

历史上的今天:
让小雨知道,这篇文章帮到了你

展开阅读全文

评论 0

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册