花褪残红青杏小。燕子飞时,绿水人家绕。
应用信息
名称: IMAGE缩略图插件
应用ID: IMAGE 最低要求: Z-BlogPHP 1.5.1 Zero Build 151740
版 本: 2 发布日期: 2014-08-27
PHP最低版本要求: 5.3 更新日期: 2018-05-21
视频教程地址:点我前往,视频以应用的ID命名,部分视频尚未完善。

插件特点

本插件基于官方应用中心sf_img1进行修改,功能为依据设定条件生成缩略图,同时本插件具有以下特点:

1、独立了缩略图路径至根目录的static文件夹,方便设置robots.txt进行收录;

2、修改了缩略图的缓存文件类型为jpg,当存在实体缩略图文件时,web服务器直接读取(需要伪静态支持),不再经过php处理读取,速度大幅度提升(300ms~500ms=>50ms~100ms);

3、去掉了没人维护的tclip模块;

4、修改插件内置的base64编码为Url安全的base64编码;

5、增加了设置是否允许缓存外部Url的图片,增强服务器安全性;

6、修改了插件内置的正则规则,增强可用性;

7、插件内置提供了nginx、apache、iis的web.config三种服务器的伪静态规则----没有伪静态不要这个插件也罢(这个后面再说);

使用方法:

1、基本与原sf_img1一致,但是由于需要上架官方app中心,插件ID不可以相同,所以修改了插件ID和对应的类名,如果使用本插件需要对原适配主题进行相应修改。

2、主题中使用文章缩略图在使用缩略图前须插入以下代码。其中第一个180表示宽,第二个180表示高。

{php}Nobird\Plugin\IMAGE\IMAGE::getPics($article,180,180,$type){/php}

之后可通过$article变量访问

{if $article->IMAGE_COUNT>0}<img src="{$article.IMAGE[0]}">{/if}

//也可以使用{$article.IMAGE_First}直接获得到文章中的第一个缩略图,当文章中不存在图片时,返回null。

3、其他方式获取缩略图

{php}$src=Nobird\Plugin\IMAGE\IMAGE::getPicUrlBy("你的图片地址,包含http://",180,180,$type){/php}
<img src="{$src}">

4、修改上述代码中的$type参数可以选择不同裁剪方式:

     $type==0: 高度为主导,等比例缩放,如果原图大于缩略图,产生缩小,否则不缩小。

     $type==1: 程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略 ,原图过小时,显示原图尺寸。

     $type==2: 不缩放,仅按照设定尺寸裁剪(由左至右,由上至下)。

     $type==3: 宽度为主导,等比例缩放,如果原图大于缩略图,产生缩小,否则不缩小。

     $type==4: 这种方法先按照固定比例缩小图片,之后裁剪多余部分。但是如果原图过小,则会拉伸至设定的大小。

     $type==5:这种方法会强制缩小/拉伸到指定大小,不剪裁。

这个插件对伪静态需求几乎是必须的

为什么说一定要伪静态之后才能使用这个插件?

1、功能上其实没什么问题,就算你不开启这个插件自带的伪静态功能,一样能实现缩略图裁剪缩放等功能,节省流量的角度来看,这么做并没有么问题。

2、速度上来看,单纯的一个php文件利用内置函数读取一个静态jpg图片,然后推送到浏览器,一般服务器执行时间在300~500ms左右,而直接访问一个静态图片,一般服务器执行时间在50ms左右,静态图片的另一个优势是:当浏览器第一次查看之后,第二次刷新优先从浏览器缓存读取(304),节省服务器资源同时可以加快展示速度。特别的:你可以通过服务器设置静态文件的缓存时间,实现更长时间的用户本地缓存。

原sf_img1插件不管你是否设置了伪静态,每次都需要经过php读取缓存文件,这导致了页面加载速度极为缓慢,虽然图片尺寸有所减小,但是...速度并没有提升,甚至减慢了(当原图尺寸和缩略图尺寸接近时)。

3、使用本插件需要注意:伪静态规则需要写入在判断实体文件存在的代码之后,Apache范例如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule static/(.*?)/(.*?)/(.*?)/(.*?)-(.*?)-(.*?)-(.*?)-a\.jpg zb_users/plugin/IMAGE/pic\.php?src=$4&width=$5&height=$6&cuttype=$7 
RewriteRule . /index.php 
</IfModule>

Nginx范例如下:

# 如果请求的文件已存在,直接返回
if (-f $request_filename) {
 break;
}
rewrite ^/static/(.*)/(.*)/(.*)/(.*)-(.*)-(.*)-(.*)-a.jpg$ /zb_users/plugin/IMAGE/pic.php?src=$4&width=$5&height=$6&cuttype=$7;        
# 所有其他请求,转给 zblog 处理
if (!-e $request_filename) {
 rewrite . /index.php last;
}

 

 

ChangeLog:

2018.05.21 修正插件在IIS7.5下的缓存表现。

2017.09.02 修改缩略图存储规则,不再受单文件夹内文件个数限制。

2017.03.21 拯救博士

2016.12.07 修复正则匹配的问题。

2016.05.16 apache open_basedir 兼容

游客
发表我的评论 换个身份
取消评论

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

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

网友最新评论 (26)

  1. 访客
    伪静态后单篇文章在static文件夹下生成的缓存文件不是唯一的。比如再次编辑这篇文章,然后加了一张图或把之前的图换了,保存文章后之前的缩略图不会被替换掉,而是又重命名生成的。因为经常重新编辑某篇文章,这样的话static文件夹下会生成很多无用的缩略图,如果选择清空缓存的话,之前所有的缩略图图片地址都会改变。sad
    当然这插件已经甩sf_img1几条街了。
    service 8年前 (2016-04-23)回复
    • 访客
      如果文章中的图片发生了变化,缩略图会跟着变,但是static文件夹内的旧的缩略图确实不会被删除(zblog的文章表没有和附件表关联,这个只能忍...);清空全部缓存之后,只是重新生成一次缓存而已,缓存图片的地址并没有发生变化。
      十五楼的鸟儿 8年前 (2016-04-23)回复
  2. 访客
    rolleyes原插件作者很久没更新这个了,鸟哥V5,好人啊,别收费啊,我把主题都更新一下
    大谋大大 8年前 (2016-04-22)回复