# QNickIPS **Repository Path**: nickspace/ips ## Basic Information - **Project Name**: QNickIPS - **Description**: Q.Nick Image Process Service - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-02-06 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QNickIPS #### 介绍 Q.Nick Image Process Service * 使用带参数方法, 轻松获取所需尺寸图片. 没必要一个个生成. * 生成一次图片后, 从缓存文件里读取图片. 不会每次都处理图片. * 防止放大图片. * 支持 GIF动图剪裁,缩放. ✪✪已解决缩放处理后GIF动图偶尔出现黑屏的问题!!! * 智能剪裁功能 * 支持强制生成图片. 给攻击者提供低成本也可以瘫痪服务器功能😎. #### Nginx 处理流程图 ![Nginx 处理流程图](http://cdn.nickspace.cn/byy_1d315uat311fok6b7jd17ur10sl0.png) #### 安装教程 1. nginx配置, 在 server 区块里添加图片路由处理部分. 自定义部分: - `$temp_folder` `'/temp'` #缓存文件夹 - `$conver_engine` `'/image_process/index.php'` #图片处理文件 ``` js server { listen 8080; server_name nickspace.local; ##### 图片处理 ##### set $t ''; set $temp_folder '/temp'; #缓存文件夹 set $conver_engine '/image_process/index.php'; #图片处理文件 set $t ''; set $refresh $arg_refresh; location ~ (.*)\.(gif|jpg|jpeg|png)(\.make)$ { if ( !-f $document_root$ori_target ){ # 没有原图片 return 404; } if ( $uri ~ (.*)(\.make)$ ) { #开始压缩图片 rewrite ^.*$ $conver_engine?$query_string last; } } location ~ (.*)\.(gif|jpg|jpeg|png)(\.temp)$ { if ( $refresh ) { #强制生成新图片 rewrite ^.*$ "$temp_folder$convert_target.make" last; } if ( -f $document_root$temp_folder$convert_target ){ # 已生成过图片 rewrite (.*)\.(gif|jpg|jpeg|png)(\.temp)$ $1.$2; expires 30d; break; } if ( $uri ~ (.*)(\.temp)$ ) { #没有缓存图片 rewrite ^.*$ "$temp_folder$convert_target.make" last; } return 404; } location ~ (.*)\.(gif|jpg|jpeg|png)$ { # //判断是否定制图 set $ori_target $1.$2; set $convert_target $1_${arg_t}_${arg_w}x${arg_h}.$2; if ( $is_args ) { rewrite ^.*$ "$temp_folder$convert_target.temp" last; } if ( -f $request_filename ){ rewrite ^.*$ $uri break; } if ( !-f $request_filename ){ return 404; } } ##### 图片处理 ##### ##### PHP解析 ##### location ~ \.php$ { #这部分根据自己的 PHP 环境设置配置就可以了 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; break; } ##### PHP解析 ##### } ``` 2. 配置路径 `IPS/Config.php`文件里设置缓存文件夹, 要跟 nginx 配置匹配才行 #### 使用说明 1. 基础图片处理参数说明 ![原图](http://cdn.nickspace.cn/ips_preview_0.png) | 模式 | 使用栗子 | 说明 | 处理后图片 | | :-: | :-: | :-: | :-: | | `fit` | `?t=ft&w=200&h=200` | 等比例缩放。 | ![](http://cdn.nickspace.cn/ips_preview_1.png) | | `fill` | `?t=fl&w=200&h=200` | 居中剪裁。就是把较短的变缩放到200px,然后将长边的大于200px的部分居中剪裁掉,图片不会变形。 | ![](http://cdn.nickspace.cn/ips_preview_2.png) | | `exact` | `?t=e&w=200&h=200` | 固定尺寸缩放 | ![](http://cdn.nickspace.cn/ips_preview_3.png) | | | `?t=e&w=0&h=200` | 等高缩放。最终高为200px,等比缩放,宽度不管。 | ![](http://cdn.nickspace.cn/ips_preview_4.png) | | | `?t=e&w=200&h=0` | 等宽缩放。最终宽为200px,等比缩放,高度不管。 | ![](http://cdn.nickspace.cn/ips_preview_5.png) | | `crop-center` | `?t=cc&w=200&h=200` | 基本位置剪裁, GIF动图剪裁不稳定. `top-left` `top-center` `top-right` `center-left` `center` `center-right` `bottom-left` `bottom-center` `bottom-right` | ![](http://cdn.nickspace.cn/ips_preview_6.png) | | `crop-top-left` | `?t=ctl&w=200&h=200` | `top-left`为例 `c`+`tl` | ![](http://cdn.nickspace.cn/ips_preview_7.png) | | `crop-smart` | `?t=cs&w=200&h=200` | 智能剪裁, 可以突出重点的, GIF动图剪裁不稳定. | ![](http://cdn.nickspace.cn/ips_preview_8.png) | 2. 强制刷新, 重新生成图片 参数上加个 `refresh=1` 可以强制刷新. > 栗子🌰: > `http://nickspace.local/c1.jpg?t=cs&w=200&h=200&refresh=0` 3. 去掉GIF动效, 只留首频图片. `config.php` 文件里设置 `enableAnimate=false`. #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request 5. 需要源代码的话... 请个饭吃吧😀. 我家前面有家淮南牛肉汤12块加一个饼2块一个😘. ![byy_1d3cjc6i8tikrhaq81vdb15e50.png](http://cdn.nickspace.cn/byy_1d3cjc6i8tikrhaq81vdb15e50.png) #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)