| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?php
- namespace app\index\service;
- class Storage
- {
- /**
- * 上传图片
- * @param $formId 图片表单名称
- * @param $scene 应用场景
- * @return array|string
- */
- public static function uploadImg($file, $scene = 'default', $water = false, $thumb = true)
- {
- try {
- $data = false;
- $path = "upload/{$scene}";
- if (!is_dir($path)) {
- mkdir($path, 0755, true);
- }
- if(empty($file)){
- return false;
- }
- $info = $file? $file->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);
- }
- }
|