|
|
<?php
|
|
|
|
|
|
namespace ali\oss\image;
|
|
|
|
|
|
use ali\oss\Base;
|
|
|
use OSS\Core\OssException;
|
|
|
use OSS\OssClient;
|
|
|
|
|
|
/**
|
|
|
* OSS图片处理类
|
|
|
* @date 2022-06-30
|
|
|
*/
|
|
|
class Handle extends Base
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
* 图片处理
|
|
|
* @param string $object 原图路径
|
|
|
* @param string $style 样式
|
|
|
* @param string $save_object 处理完成后的图片路径
|
|
|
* @adate 2022-07-01
|
|
|
*/
|
|
|
public function saveImage($object, $style, $save_object = '')
|
|
|
{
|
|
|
// 判断$object是否为带http连接的全路径
|
|
|
if (strpos($object, 'https://') !== false || strpos($object, 'http://') !== false) {
|
|
|
// 分割字符串
|
|
|
$array = explode('://', $object);
|
|
|
|
|
|
// 获取第1个/之后的字符串即为$object
|
|
|
$index = strpos($array[1], '/');
|
|
|
$object = substr($array[1], $index + 1);
|
|
|
}
|
|
|
|
|
|
// 目标object路径,没有定义的话默认在原路径之后加_new命名
|
|
|
// 目标object路径,没有定义的话默认在原路径之后加_new命名
|
|
|
if (!$save_object) {
|
|
|
// 获取后缀
|
|
|
$suffix = get_suffix($object);
|
|
|
// 重组目标object路径:去掉.后缀,修改名字,再加上后缀
|
|
|
$save_object = substr($object, 0, strlen($object) - strlen($suffix) - 1) . '_new' . '.' . $suffix;
|
|
|
}
|
|
|
|
|
|
// 图片处理后,保存到当前bucket
|
|
|
$process = 'image/' . $style .
|
|
|
'|sys/saveas' .
|
|
|
',o_' . base64url_encode($save_object) .
|
|
|
',b_' . base64url_encode($this->config['bucket']);
|
|
|
|
|
|
try {
|
|
|
// 初始化
|
|
|
$ossClient = $this->createClient();
|
|
|
|
|
|
// 处理后的图片存储
|
|
|
$result = $ossClient->processObject($this->config['bucket'], $object, $process);
|
|
|
|
|
|
// 结果json转array
|
|
|
$result = json_decode($result, true);
|
|
|
|
|
|
// 处理后的图片全路径
|
|
|
if ($result['status'] == 'OK') {
|
|
|
$result['url'] = $this->config['show_url'] . '/' . $result['object'];
|
|
|
}
|
|
|
|
|
|
|
|
|
// 记录日志(需要把水印原字符串存到请求参数)
|
|
|
$uid = defined('UID') ? UID : '';
|
|
|
platformLog([
|
|
|
'object' => $object,
|
|
|
'style' => $style,
|
|
|
'save_object' => $save_object
|
|
|
], $result, 'ali_oss_image_handle_uid_' . $uid);
|
|
|
|
|
|
// 返回成功数据
|
|
|
return $result;
|
|
|
} catch (OssException $e) {
|
|
|
// 返回报错
|
|
|
$result['Code'] = 5000;
|
|
|
$result['Message'] = $e->getMessage();
|
|
|
|
|
|
// 记录日志(需要把水印原字符串存到请求参数)
|
|
|
$uid = defined('UID') ? UID : '';
|
|
|
platformLog([
|
|
|
'object' => $object,
|
|
|
'style' => $style,
|
|
|
'save_object' => $save_object
|
|
|
], $result, 'ali_oss_image_handle_uid_' . $uid);
|
|
|
|
|
|
// 返回错误数据
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 图片处理不保存
|
|
|
* @param string $oss_url 原图路径 带不带http://都可以,底层已处理
|
|
|
* @param string $style 样式
|
|
|
* @adate 2022-12-08
|
|
|
*/
|
|
|
public function handleImage($oss_url, $style)
|
|
|
{
|
|
|
// 判断$object是否为带http连接的全路径,如果不是全路径补全路径
|
|
|
if (strpos($oss_url, 'https://') === false && strpos($oss_url, 'http://') === false) {
|
|
|
$oss_url = $this->config['show_url'] . '/' . $oss_url;
|
|
|
}
|
|
|
|
|
|
// 图片处理携带参数
|
|
|
$handle_url = $oss_url . '?x-oss-process=image/' . $style;
|
|
|
|
|
|
// 记录日志
|
|
|
$uid = defined('UID') ? UID : '';
|
|
|
platformLog([
|
|
|
'oss_url' => $oss_url,
|
|
|
'style' => $style
|
|
|
], $handle_url, 'ali_oss_hadle_image_uid_' . $uid);
|
|
|
|
|
|
// 返回处理后的路径
|
|
|
return $handle_url;
|
|
|
}
|
|
|
}
|