-
Notifications
You must be signed in to change notification settings - Fork 1
/
TinyImage.php
123 lines (115 loc) · 4.03 KB
/
TinyImage.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
namespace moxuandi\TinyPNG;
use Tinify\Result;
use Tinify\Source;
use Tinify\Tinify;
use yii\base\Exception;
use yii\base\InvalidConfigException;
use yii\helpers\FileHelper;
/**
* Class TinyImage Tinify API client for Yii2
*
* @author zhangmoxuan <[email protected]>
* @link http://www.zhangmoxuan.com
* @QQ 1104984259
* @Date 2020-3-10
*/
class TinyImage
{
/**
* @var string API Keys for TinyPNG
* 申请地址: https://tinypng.com/developers
*/
public $apiKey;
/**
* TinyImage constructor.
* @param string $apiKey
* @throws InvalidConfigException
*/
public function __construct($apiKey)
{
$this->apiKey = $apiKey;
$this->init();
}
/**
* @throws InvalidConfigException
*/
public function init()
{
if (!$this->apiKey) {
throw new InvalidConfigException("The property 'apiKey' must be in set in " . get_class($this) . ".");
}
Tinify::setKey($this->apiKey);
}
/**
* 压缩指定图像.
* @param string $input 输入图像.
* @param string $output 输出图像. 未设置, 将覆盖源图.
* @param string $type 资源类型.
* @param array $resizeOptions 调整图像大小的配置. 默认将不调整图像大小. 数组参数有:
* - `method`: string, 调整方式, 必填项. 可用值有:
* - `scale`: 按比例缩小图像. 必须提供`width`或`height`之一, 但不能同时提供两者.
* - `fit`: 按比例缩小图像. 必须同时提供`width`或`height`. 一般结果的高度不超过`height`值.
* - `cover`: 按比例校正图像并在必要时对其进行裁剪, 以使结果具有给定的尺寸. 必须同时提供`width`或`height`. 图像的哪部分被裁剪掉将由智能算法自动确定.
* - `thumb`: 图像将按比例缩小到指定的`width`或`height`. 必须同时提供`width`或`height`.
* - `width`: int, 目标宽度.
* - `height`: int, 目标高度.
* @param string $result 结果类型. 可选值: (`toFile`:保存到图片;`toBuffer`:输出图片数据;`result`:输出结果对象;).
* @return false|int|Result
* @throws Exception
*/
public function compress($input, $output = '', $type = 'file', $resizeOptions = [], $result = 'toFile')
{
$source = $this->getSource($input, $type);
if ($resizeOptions) {
$source = $source->resize($resizeOptions);
}
$output = $output ?: $input;
if (!is_dir(dirname($output))) {
FileHelper::createDirectory(dirname($output), 777);
}
switch ($result) {
case 'toBuffer':
return $source->toBuffer();
break;
case 'result':
return $source->result();
break;
case 'toFile':
default:
return $source->toFile($output);
break;
}
}
/**
* 得到压缩图片后的响应结果.
* @param string $input 源图
* @param string $type 资源类型. 可用类型:
* - 'file': 本地图片的路径(默认值);
* - `buffer`: 图片信息字符串;
* - `url`: 远程图片路径;
* @return Source Source 对象可用方法:
* - 'resize($options)': 调整图像大小;
* - `toFile($path)`: 保存图片到指定位置;
* - 'toBuffer()': 返回图片信息字符串;
* - 'result()': 返回`\Tinify\Result`对象;
* - 'preserve()': 保留图片元数据;
* - 'store($options)': 将图像保存到`Amazon S3`或`Google Cloud Storage`;
*/
public function getSource($input, $type = 'file')
{
switch ($type) {
case 'buffer':
$source = Source::fromBuffer($input);
break;
case 'url':
$source = Source::fromUrl($input);
break;
case 'file':
default:
$source = Source::fromFile($input);
break;
}
return $source;
}
}