使用七牛云存储 图片缩略图功能取代 timthumb.php

18,623
使用七牛云存储 图片缩略图功能取代 timthumb.php
  • 4.33 / 5 5
4.33分(9票)

好吧,其实这是个很简单的方法,最终你需要做的其实只是修改行代码。因此,本文面向的是一些使用七牛云存储的、对修改代码不怎么熟悉的童鞋,高手请略过。相信不少WordPress 主题都是用 timthumb.php 来进行缩略图裁切,用 timthumb.php 替代WordPress 自带的缩略图功能固然有它的好处,但其缺点也是不可小视:1、安全性。具体不多说,请以“ timthumb 漏洞”为关键词google it。但据说新版 timthumb已经解决该漏洞问题了;2、占用服务器资源,timthumb.php 运行起来挺占内存的;3、生成的缩略图文件要占用空间。

使用七牛的缩略图功能之好处

如果你有使用七牛云存储的话,大可将timthumb.php 的缩略图裁切功能替换为七牛的图片缩略图功能——也可以完美解决上面所说三个缺点。安全性就跟正常加载图片那样,缩略图文件存储在七牛的服务器上面,减少本地服务器压力;更重要的是,通过七牛的CDN 加速,取得不错的加载速度。

一个例子

如果需要一个使用七牛云存储 图片缩略图功能取代 timthumb.php 的例子,那么请前往 Jeff的阳台 首页,新版Jeff的阳台 的主题就是直接用七牛的取代了 timthumb.php。具体查看首页缩略图的路径研究一下就知道了。下面的教程可以结合Jeff的阳台的来领会、运用。

需要注意的是,缩略图的源图片必须在七牛的服务上,否则下面都是空话。如果图片是外链的,对于WordPress ,请用一些网络图片转本地插件来转换,具体不多说。

教程

下面以Jeff的阳台 首页文章列表缩略图 为例子予以教学:

如首页文章列表的缩略图之前是用 timthumb.php 的,相关位置的代码如下:

1
 <img src="<?php bloginfo('template_url'); ?>/timthumb.php?src=<?php echo post_thumbnail_src(); ?>&h=150&w=200&zc=1" alt="<?php the_title(); ?>"/>

post_thumbnail_src 函数的话,不少中文主题的functions.php 都有这个函数或其他名称的功能类似的函数。

post_thumbnail_src 函数的功能是“选图”——如果有,输出自定义域图片地址;否则,如果有特色缩略图,则输出缩略图地址;再接着是文章第一张图片,最后是默认缩略图或者随机图片。该段函数详见《WordPress纯代码高仿 无觅相关文章 图文模式功能》。如有不同,请自行修改为自己的。

熟悉 timthumb.php 的用法就知道截的是200×150 大小的缩略图,参数zc=1表示从图片中央进行裁剪。要转用七牛的缩略图功能,先到七牛开发者后台,进入你的图片所在的bucket(空间):

点击“数据处理”,先设置分隔符,如Jeff 设置为 -(中划线):

然后新建图片样式

根据上面的代码,我需要的是200×150 的缩略图,那么图片样式设置应该为如图:

样式名称 可以自定义,Jeff 为了识别方便,名称是所截的大小。

保存所有设置后,将上面的代码修改为以下:

1
 <img src="<?php echo post_thumbnail_src(); ?>-200x150"/>

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

保存,刷新一下浏览器,正常的话就搞定了。

喵~本文目前有11条留言,欢迎发表评论!

  1. 感谢,虽然用你的不成功,但我修改了下成功了。。。

    [回复]
  2. 4#
    :

    我正要换成timthumb·

    [回复]
  3. 赶上地板鸟
    :

    请问我这个怎么修改?
    //输出缩略图地址
    function post_thumbnail_img($width,$height) {
    global $post;
    $title = $post->post_title;
    // 判断该文章是否设置的缩略图,如果有则直接显示
    if ( has_post_thumbnail() ) {
    $timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID) , ‘full’);
    $post_timthumb = ”;
    echo $post_timthumb;
    } else { //如果文章没有设置缩略图,则查找文章内是否包含图片
    $content = $post->post_content;
    preg_match_all(‘//sim’, $content, $strResult, PREG_PATTERN_ORDER);
    $n = count($strResult[1]);
    if($n > 0){ // 如果文章内包含有图片,就用第一张图片做为缩略图
    echo ”;
    }else { // 如果文章内没有图片,则用默认的图片。
    echo ”;
    }
    }
    }

    [回复]
    • 不用改,post_thumbnail_img 函数就相当于本文的post_thumbnail_src 函数,照搬即可

      [回复]
      • 没用成功,但是我想知道的是这样做以后不用七牛了岂不是图片都变样了
        我想用wpjam_post_thumbnail 这个函数不知道你会么?
        我不会调用
        不过还是感谢你

        [回复]
        • wpjam_post_thumbnail ?水煮鱼那个插件??没用过啊

          [回复]
          • :

            好烦恼啊,使用了插件之后,有一些主题可以显示缩略图,而有一些就不行

            [回复]
  4. 板凳也不错
    :

    只是需要改文中提到的一处代码?

    [回复]
    • 对呀,当然前提是你的代码结构与我文中的要差不多

      [回复]
      • 我用的主题代码太乱了,不会搞了。。。

        我再试试

        [回复]
  5. 传说中的沙发
    :

    学习了!有空就换上!

    [回复]

打破沉默,我来发表评论鸟~