囧。。又是一篇技术文。。。地球人都知道,如果直接使用 width 等标签直接改变图片长宽的话难免会有失真,而用 auto 的话,就会显得不统一,那么如何生成“完美”的缩略图呢?难道只能手动裁剪再上传?没那么麻烦!下面我们就请出国外 WordPress 常用的缩略图神器:TimThumb!

TimThumb 是一个非常神奇的第三方小文件,它可以任意裁剪图片大小。这一切都不需你手动操作,有了它,你可以为你博客文章缩略图进行定义裁剪,不用加载原本的大而笨重的高清图片,只需要加载裁剪后的缩略图,好处最大就在于减少页面加载时间喽!

其实我认识这款神器还是得益于在 Ben-lab 里,我偶然一次翻看 Ben 的缩略图代码的时候。(我会告诉你我天天去他那拿代码嘛?)

废话不多说,赶紧看看怎样使用!

使用方法

首先需要先确认主机是否支持 GD 库(一般主机都支持)下载 TimThumb.php 并将其上传到你的空间(我是上传在主题目录中的),然后在和 timthumb.php 同一个目录下,创建一个 cache 文件夹,如果你是 linux 主机,需要为 cache 文件夹提供写权限,我设置的权限为 777。

下面的在需要使用的地方贴上下面的代码就可以了:

<img src="http://timthumb所在目录/timthumb.php?src=图片地址&h=定义高度&w=定义宽度&zc=1"/> 

那么,如何使用php函数来获取图片地址呢?下面我来分别介绍在WP和TE两个平台下获取第一张图片地址的方法。

Typecho 下获取第一张图片地址

将下列代码添加至主题 functions.php 文件中:

function img_postthumb($cid) {
    $db = Typecho_Db::get();
    $rs = $db->fetchRow($db->select('table.contents.text')
        ->from('table.contents')
        ->where('table.contents.cid=?', $cid)
        ->order('table.contents.cid', Typecho_Db::SORT_ASC)
        ->limit(1));

    preg_match_all("/\<img.*?src\=\"(.*?)\"[^>]*>/i", $rs['text'], $thumbUrl);  //通过正则式获取图片地址
    $img_src = $thumbUrl[1][0];  //将赋值给img_src
    $img_counter = count($thumbUrl[0]);  //一个src地址的计数器

    switch ($img_counter > 0) {
        case $allPics = 1:
            echo $img_src;  //当找到一个src地址的时候,输出缩略图
            break;
        default:
            echo "";  //没找到(默认情况下),不输出任何内容
    };
}

输出时,使用:

<?php echo img_postthumb($this->cid); ?>

这样,完美的输出应为:

<img src="http://timthumb所在目录/timthumb.php?src=<?php echo img_postthumb($this->cid); ?>&h=定义高度&w=定义宽度&zc=1"/>

在White-M主题中添加TimThumb缩略图

White-M v3.0 均已支持在设置中开启缩略图选项。

最终效果

[timthumb.png]

盒盒:Micro-M Theme 也会增加此缩略图功能。