15小时前
|
|
|
`imageproxy` 是一个由 Go 语言编写的**具备缓存和调整图像尺寸功能**的代理服务器。它的主要目标是提供一种灵活且安全的方式来动态处理和提供远程托管的图片。
## 主要特点和功能:
1. **图像调整与变换**
* **动态调整尺寸**:支持按像素或按比例调整图像的宽度和高度(如 `200x` 或 `x0.5`)。
* **裁剪**:支持标准裁剪、**智能裁剪**(Smart Crop, `sc`)以及手动裁剪。
* **变换**:支持旋转(如 `r90`)、水平翻转(`fh`)和垂直翻转(`fv`)等基本图像调整。
* **格式转换**:支持将图片转换为不同的格式(如 `png`, `jpg`, `webp`),并可设置输出质量(如 `q60`)。
2. **高性能缓存**
* 默认不启用缓存,但可通过配置 `-cache` 标志或环境变量启用。
* 支持多种缓存后端,包括:
* **内存缓存**(In-memory LRU cache)。
* **本地磁盘**缓存。
* **云存储**:支持 Amazon S3、Google Cloud Storage (GCS)、Azure Storage 和 Redis。
3. **强大的安全控制**
* **允许/拒绝主机列表**:通过 `-allowHosts`(如您之前设置的 `IMAGEPROXY_ALLOWHOSTS`)或 `-denyHosts` 限制代理服务器可以抓取图片的远程主机,有效防止滥用。
* **请求签名**:通过配置 `-signatureKey`,要求所有请求必须包含 HMAC-SHA256 数字签名,以保证请求的合法性。
* **Referer 限制**:通过 `-referrers` 限制图片只能在指定的 HTTP 引用页(referrer)上访问,防止图片盗链。
4. **易于部署**
* 由于是纯 Go 语言编写,编译后只有一个独立二进制文件,部署非常简单。
* 官方提供了 **Docker 镜像**(您目前正在使用),以及在 Heroku、AWS Elastic Beanstalk 和 Caddy/nginx 下的部署指南。
## Docker 部署
```
version: '3.8'
services:
imageproxy:
container_name: imageproxy
image: ghcr.io/willnorris/imageproxy
ports:
- "8080:8080"
environment: # 环境变量设置示例
- IMAGEPROXY_ALLOWHOSTS=*.zhulink.vip,*.google.com # 白名单
command: -addr 0.0.0.0:8080
restart: always
```
### URL 结构
`imageproxy` 的 URL 结构清晰易懂,所有功能都体现在 URL 路径中:
`http://你的服务地址/\{options\}/\{remote\_url}`
* `{options}`:用逗号分隔的图像处理参数(如 `200x,q75,sc`)。
* `{remote_url}`:原始图片的 URL,可以明文、百分号编码或 Base64 编码。
## 🖼️ **`imageproxy` URL 图像处理选项 options(完整列表)**
### **I. 尺寸与缩放控制**
| 选项 (Option) | 格式示例 | 含义 (Description) |
| :--- | :--- | :--- |
| **按像素指定尺寸** | `200x` | 宽度设为 200px,高度按比例缩放。 |
| | `x150` | 高度设为 150px,宽度按比例缩放。 |
| | `100x150` | 宽度 100px,高度 150px。 |
| | `100` | 100*100 的正方形。 |
| **按比例指定尺寸** | `0.5x` | 宽度缩放为原图的 50%,高度按比例缩放。 |
| | `x0.15` | 高度缩放为原图的 15%,宽度按比例缩放。 |
### **II. 裁剪与适应模式**
| 选项 (Option) | 格式示例 | 含义 (Description) |
| :--- | :--- | :--- |
| **适应模式** | `,fit` | **缩放以适应**(Scale to Fit):按比例缩放,确保图像完全适应指定尺寸,不会进行裁剪。 |
| **填充模式** | `,fill` | **缩放以填充**(Scale to Fill):按比例缩放,确保图像完全覆盖指定尺寸,超出部分会被裁剪(这是默认行为)。 |
| **智能裁剪** | `,sc` | 启用 **Smart Crop**(智能裁剪),尝试找到图像中最有趣的区域进行居中裁剪。 |
| **手动裁剪** | `cx<x>,cy<y>,cw<w>,ch<h>` | **局部裁剪**:从坐标 `(x, y)` 开始,裁剪宽度 `w`、高度 `h` 的矩形区域,再进行后续缩放。 |
### **III. 变换与效果**
| 选项 (Option) | 格式示例 | 含义 (Description) |
| :--- | :--- | :--- |
| **旋转** | `,r90` | 顺时针旋转 90 度。支持 `r90`, `r180`, `r270`。 |
| **水平翻转** | `,fh` | **Flip Horizontal**(水平翻转)。 |
| **垂直翻转** | `,fv` | **Flip Vertical**(垂直翻转)。 |
### **IV. 输出格式与质量**
| 选项 (Option) | 格式示例 | 含义 (Description) |
| :--- | :--- | :--- |
| **输出质量** | `,q60` | 设置输出 JPEG 或 WebP 格式的**质量**为 60%(值范围 1-100)。 |
| **输出格式** | `,png` | 强制将输出格式转换为 **PNG**。 |
| | `,jpg` | 强制将输出格式转换为 **JPEG**。 |
| | `,webp` | 强制将输出格式转换为 **WebP**。 |
### **V. 安全与功能**
| 选项 (Option) | 格式示例 | 含义 (Description) |
| :--- | :--- | :--- |
| **数字签名** | `,s...` | 包含 HMAC-SHA256 **数字签名**。用于验证请求是否有效(前提是服务已配置 `signatureKey`)。 |
### **📌 选项组合规则**
1. **顺序随意**:选项可以以任何顺序排列,例如 `q70,200x` 和 `200x,q70` 效果相同。
2. **重复覆盖**:如果多次指定同一参数,后面的参数将覆盖前面的参数。
3. **组合使用**:所有选项都可以组合使用,例如:`100x200,fit,q50,png`。
🫵 来啊,说点有用的废话!
▲