You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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;
}
}