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