getInfo() : []; $tempName = isset($info['tmp_name'])? $info['tmp_name'] : ''; PRedis::set('uploads:file:'.$scene.'_'.date('YmdHis'), ['file'=> $file, 'info'=> $info], 3600); if(empty($tempName)){ return 3001; } $fileSize = config('files.imageSize'); $fileSize = $fileSize? $fileSize * 1024 * 1024 : 50 * 1024 * 1024; $size = isset($info['size'])? intval($info['size']) : 0; if($size>$fileSize){ return lang('file_size', ['size'=> intval($fileSize/1024/1024)]); } $info = $file->validate(['size' => $fileSize, 'ext' => 'jpg,jpeg,png,gif']) ->move('./' . $path); PRedis::set('uploads:info:'.$scene.'_'.date('YmdHis'), ['info'=> $info], 3600); if ($info) { $filename = str_replace('\\', '/', $info->getSaveName()); $fileInfo = $info->getInfo(); $name = isset($fileInfo['name']) ? $fileInfo['name'] : ''; $file = "{$scene}/" . $filename; if($thumb){ $file = Storage::imageThumb($file); } if ($water) { $siteInfo = cmf_get_site_info(); $waterTxt = isset($siteInfo['site_name']) ? trim($siteInfo['site_name']) : '爱鞋邦'; if ($waterTxt && $water) { $params = ['num' => 1, 'angle' => 0, 'locate' => 9, 'offset' => -10, 'fontSize' => 14]; $file = Storage::imageWater($file, $waterTxt, $params); } } $data = [ 'name' => $name, 'file' => $file, 'preview' => cmf_get_image_preview_url($file), ]; } else { return false; } return $data; } catch (\Exception $exception) { PRedis::set('uploads:error:'.$scene.'_'.date('YmdHis'), $exception, 3600); return false; } } /** * 上传图片 * @param $formId 图片表单名称 * @param $scene 应用场景 * @return array|string */ public static function uploadFile($file, $scene = 'default') { $data = []; $path = "upload/files/{$scene}"; if (!is_dir($path)) { mkdir($path, 0755, true); } $fileTypes = config('files.fileTypes'); $fileSize = config('files.fileSize'); $fileSize = $fileSize ? $fileSize * 1024 * 1024 : 30 * 1024 * 1024; $fileTypes = $fileTypes ? $fileTypes : ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf']; $info = $file->validate(['size' => $fileSize, 'ext' => implode(',', $fileTypes)])->move('./' . $path); if ($info) { $fileInfo = $info->getInfo(); $name = isset($fileInfo['name']) ? $fileInfo['name'] : ''; $data = [ 'name' => $name, 'file' => $file, 'preview' => cmf_get_image_preview_url($file), ]; } return $data; } /** * 缩略图 * @param $file * @param int $type * @return $this */ public static function imageThumb($file, $type=1, $params=[]){ $siteInfo = cmf_get_site_info(); $thumbWidth = isset($siteInfo['thumb_width'])? intval($siteInfo['thumb_width']) : 0; $thumbHeight = isset($siteInfo['thumb_height'])? intval($siteInfo['thumb_height']) : 0; $width = isset($params['width'])? $params['width'] : 0; $height = isset($params['height'])? $params['height'] : 0; $thumbWidth = $thumbWidth>600? $thumbWidth : 600; $thumbHeight = $thumbHeight>600? $thumbHeight : 600; $thumbWidth = $width? $width : $thumbWidth; $thumbHeight = $height? $height : $thumbHeight; // 要加水印的图片 $realFilename = 'upload/' . $file; if (!file_exists($realFilename)) { return false; } $image = \think\Image::open($realFilename); $filepath = dirname($realFilename); $paths = explode('_',basename($realFilename)); $filename = end($paths); $thumbfile = $filepath . '/thumb_' . $thumbWidth . '_' . $thumbHeight . '_' . $type . '_' . $filename; $image->thumb($thumbWidth, $thumbHeight, $type)->save($thumbfile); return preg_replace("/^upload\//", '', $thumbfile); } /** * 文件添加水印 * @param $filename * @param string $text * @param array $params * @return string */ public static function imageWater($filename, $text = '', $params = [], $deleteOld = true) { if (empty($filename)) { return ''; } // 字体 $font = isset($params['font']) ? $params['font'] : ''; $font = $font ? $font : 'fonts/msyh.ttc'; // 字体颜色 $color = isset($params['color']) ? $params['color'] : ''; $color = $color ? $color : '#D92E2E'; // 字体大小 $fontSize = isset($params['fontSize']) ? intval($params['fontSize']) : 0; $fontSize = $fontSize ? $fontSize : 20; // 文字旋转角度 $angle = isset($params['angle']) ? intval($params['angle']) : -1; $angle = $angle >= 0 ? $angle : 30; // 文字偏移 $offset = isset($params['offset']) ? intval($params['offset']) : 0; $offset = $offset ? $offset : 0; // 水印文字密集数量 $num = isset($params['num']) ? intval($params['num']) : 0; $num = $num ? $num : 3; // 文字位置 $locate = isset($params['locate']) ? intval($params['locate']) : 0; $locate = $locate ? $locate : 5; // 要加水印的图片 $realFilename = 'upload/' . $filename; if (!file_exists($realFilename)) { return $filename; } chmod($realFilename, 0755); $filepath = dirname($realFilename); $waterfile = $filepath . '/water_' . basename($realFilename); @fopen($waterfile, 'w+'); chmod($waterfile, 0755); $image = \think\Image::open($realFilename); if ($num > 1) { $locate = 3; $tempText = str_repeat($text . ' ', 15); for ($i = 0; $i < $num * 10; $i++) { $offset = ($i - 5) * 80; $image->text($tempText, $font, $fontSize, $color, $locate, $offset, $angle)->save($waterfile); } } else { $image->text($text, $font, $fontSize, $color, $locate, $offset, $angle)->save($waterfile); } if ($deleteOld) { @unlink($realFilename); } return preg_replace("/^upload\//", '', $waterfile); } }