flzta's picture
Upload 522 files
a4a352b verified
<?php
namespace app\common\model;
use think\image\Exception;
class Image extends Base {
public function down_load($url, $config, $flag = 'vod')
{
if (substr($url, 0, 4) == 'http') {
return $this->down_exec($url, $config, $flag);
} else {
return $url;
}
}
public function down_exec($url, $config, $flag = 'vod')
{
$upload_image_ext = 'jpg,jpeg,png,gif,webp';
$ext = strtolower(pathinfo($url, PATHINFO_EXTENSION));
if (!in_array($ext, explode(',', $upload_image_ext))) {
$ext = 'jpg';
}
$img = mac_curl_get($url);
if (empty($img) || strlen($img) < 10) {
return $url;
}
$file_name = md5(uniqid()) .'.' . $ext;
// 上传附件路径
$_upload_path = ROOT_PATH . 'upload' . '/' . $flag . '/';
// 附件访问路径
$_save_path = 'upload'. '/' . $flag . '/' ;
$ymd = date('Ymd');
$n_dir = $ymd;
for($i=1;$i<=100;$i++){
$n_dir = $ymd .'-'.$i;
$path1 = $_upload_path . $n_dir. '/';
if(file_exists($path1)){
$farr = glob($path1.'*.*');
if($farr){
$fcount = count($farr);
if($fcount>999){
continue;
}
else{
break;
}
}
else{
break;
}
}
else{
break;
}
}
$_upload_path .= $n_dir . '/';
$_save_path .= $n_dir . '/';
//附件访问地址
$_file_path = $_save_path.$file_name;
//写入文件
$saved_img_path = $_upload_path . $file_name;
$r = mac_write_file($saved_img_path, $img);
if(!$r){
return $url;
}
// 重新获取文件类型,不满足时,返回老链接
$image_info = getimagesize($saved_img_path);
$extension_hash = [
'1' => 'gif',
'2' => 'jpg',
'3' => 'png',
'18' => 'webp',
];
if (!isset($image_info[2]) || !isset($extension_hash[$image_info[2]])) {
return $url;
}
$file_size = filesize($_upload_path.$file_name);
// 水印
if ($config['watermark'] == 1) {
$this->watermark($_file_path,$config,$flag);
}
// 缩略图
if ($config['thumb'] == 1) {
$this->makethumb($_file_path,$config,$flag);
}
//上传到远程
$_file_path = model('Upload')->api($_file_path, $config);
$tmp = $_file_path;
if (str_starts_with($tmp, '/upload')) {
$tmp = substr($tmp,1);
}
if (str_starts_with($tmp, 'upload')) {
$annex = [];
$annex['annex_file'] = $tmp;
$annex['annex_type'] = 'image';
$annex['annex_size'] = $file_size;
model('Annex')->saveData($annex);
}
return $_file_path;
}
public function watermark($file_path,$config,$flag='vod')
{
if(empty($config['watermark_font'])){
$config['watermark_font'] = './static/font/test.ttf';
}
try {
$image = \think\Image::open('./' . $file_path);
$image->text($config['watermark_content']."", $config['watermark_font'], $config['watermark_size'], $config['watermark_color'],$config['watermark_location'])->save('./' . $file_path);
}
catch(\Exception $e){
}
}
public function makethumb($file_path,$config,$flag='vod',$new=1)
{
$thumb_type = $config['thumb_type'];
$data['thumb'] = [];
if (!empty($config['thumb_size'])) {
try {
$image = \think\Image::open('./' . $file_path);
// 支持多种尺寸的缩略图
$thumbs = explode(',', $config['thumb_size']);
foreach ($thumbs as $k => $v) {
$t_size = explode('x', strtolower($v));
if (!isset($t_size[1])) {
$t_size[1] = $t_size[0];
}
$new_thumb = $file_path . '_' . $t_size[0] . 'x' . $t_size[1] . '.' . strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
if($new==0){
$new_thumb = $file_path;
}
$image->thumb($t_size[0], $t_size[1], $thumb_type)->save('./' . $new_thumb);
$thumb_size = round(filesize('./' . $new_thumb) / 1024, 2);
$data['thumb'][$k]['type'] = 'image';
$data['thumb'][$k]['flag'] = $flag;
$data['thumb'][$k]['file'] = $new_thumb;
$data['thumb'][$k]['size'] = $thumb_size;
$data['thumb'][$k]['ctime'] = request()->time();
if ($config['watermark'] == 1) {// 开启文字水印
$image = \think\Image::open('./' . $new_thumb);
$image->text($config['watermark_content'], $config['watermark_font'], $config['watermark_size'], $config['watermark_color'])->save('./' . $new_thumb);
}
}
}
catch(\Exception $e){
}
}
return $data;
}
}