141 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | ||
| namespace app\service;
 | ||
| 
 | ||
| use think\Image as TImage;
 | ||
| use app\model\System;
 | ||
| 
 | ||
| class Image extends File
 | ||
| {
 | ||
|     /**
 | ||
|      * 对图片进行重置大小,并对宽度大于max宽度的等比缩放为宽度为1920
 | ||
|      * milo
 | ||
|      * 2019-10-24修改
 | ||
|      */
 | ||
|     public static function resize($src)
 | ||
|     {
 | ||
|         $max = 1920;
 | ||
|         $realPath = public_path() . ltrim($src,'/');
 | ||
|         if(is_file($realPath)){
 | ||
|             $img = TImage::open($realPath);
 | ||
|             list($img_w,$img_h) = $img->size();
 | ||
|             if($max > 0 && $img_w > $max){
 | ||
|                 $height = floor($max * ($img_h / $img_w));
 | ||
|                 $img->thumb($max, $height)->save($realPath);
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 添加水印
 | ||
|      * milo
 | ||
|      * 2018-01-17
 | ||
|      */
 | ||
|     public static function mark($src)
 | ||
|     {
 | ||
|         $rootPath = app()->getRootPath();
 | ||
|         if(!empty($src)){
 | ||
|             $system = System::getSystem();
 | ||
|             $realPath = $rootPath . 'public/' . ltrim($src, '/');
 | ||
|             if(is_file($realPath)){
 | ||
|                 if($system['is_mark']){
 | ||
|                     $mark = $rootPath . ltrim($system['mark_img'], '/');
 | ||
|                     if(is_file($mark)){
 | ||
|                         $mark_position = $system['mark_position']??5;
 | ||
|                         $mark_opacity = $system['mark_opacity']??50;
 | ||
|                         $img = TImage::Open($realPath);
 | ||
|                         $img->water($mark,$mark_position,$mark_opacity)->save($realPath);
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     //获取水印位置键值对
 | ||
|     public static function getMarkPosition()
 | ||
|     {
 | ||
|         return [
 | ||
|             "1" => '上左',
 | ||
|             "2" => '上中',
 | ||
|             "3" => '上右',
 | ||
|             "4" => '中左',
 | ||
|             "5" => '正中',
 | ||
|             "6" => '中右',
 | ||
|             "7" => '下左',
 | ||
|             "8" => '下中',
 | ||
|             "9" => '下右'
 | ||
|         ];
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 删除图片
 | ||
|      * milo
 | ||
|      * 2018-01-15
 | ||
|      */
 | ||
|     public static function delImg($src)
 | ||
|     {
 | ||
|         if(!empty(trim($src))){
 | ||
|             $realPath = app()->getRootPath() . 'public/' . ltrim($src, '/');
 | ||
|             if (file_exists($realPath)) {
 | ||
|                 $info = pathinfo($realPath);
 | ||
|                 $source = $info['dirname'] . DIRECTORY_SEPARATOR . $info['filename'] . '*.' . $info['extension'];
 | ||
|                 foreach(glob($source) as $filename){
 | ||
|                     if(is_file($filename)){
 | ||
|                         unlink($filename);
 | ||
|                     }
 | ||
|                 }
 | ||
|                 clearstatcache();// 清除缓存
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|     }
 | ||
|     /**
 | ||
|      * 获取缩略图
 | ||
|      * milo
 | ||
|      * 2019-10-24修改
 | ||
|      * 避免跨平台出错,目录分隔符全部转换为'/'
 | ||
|      * app()->getRuntimePath() = app()->getRootPath().'runtime/当前应用模块(api)/'
 | ||
|      */
 | ||
|     public static function getThumb($src,$width=0,$height=0,$type = TImage::THUMB_CENTER)
 | ||
|     {
 | ||
|         if(empty($src)){
 | ||
|             return '';
 | ||
|         }
 | ||
|         //文件存在 就不用切割了
 | ||
|         $suffix = explode(".",$src);
 | ||
|         if(count($suffix)==2){
 | ||
|             $cuttingUrl = $suffix[0]."_".$width."_".$height.".".$suffix[1];
 | ||
|             if(file_exists(public_path().$cuttingUrl)){
 | ||
|                 return $cuttingUrl;
 | ||
|             }
 | ||
|         }
 | ||
|         $rootPath = app()->getRootPath();
 | ||
|         $realPath = $rootPath . 'public/' . ltrim($src, '/');
 | ||
|         $realPath = str_replace('\\', '/', $realPath);
 | ||
|         if(!file_exists($realPath)){
 | ||
|             return '';
 | ||
|         }
 | ||
|         $info = pathinfo($src);
 | ||
|         if($width <= 0 && $height <= 0){    //高宽都小于或等于0,则返回原图片
 | ||
|             return $src;
 | ||
|         }
 | ||
|         $image = TImage::open($realPath);
 | ||
|         list($imageWidth, $imageHeight) = $image->size();
 | ||
|         if($width <= 0){
 | ||
|             $width = floor($height * ($imageWidth / $imageHeight));
 | ||
|         }elseif($height <= 0){
 | ||
|             $height = floor($width * ($imageHeight / $imageWidth));
 | ||
|         }
 | ||
|         if($width >= $imageWidth || $height >= $imageHeight){
 | ||
|             return $src;
 | ||
|         }
 | ||
|         $thumbName = $info['dirname']. DIRECTORY_SEPARATOR .$info['filename'].'_'.$width.'_'.$height.'.'.$info['extension'];
 | ||
|         $realThumbName = $rootPath . 'public/' . ltrim($thumbName, '/');
 | ||
|         $realThumbName = str_replace('\\', '/', $realThumbName);
 | ||
|         if(!file_exists($realThumbName)){
 | ||
|             $image = TImage::open($realPath);
 | ||
|             $image->thumb($width, $height, $type)->save($realThumbName);
 | ||
|         }
 | ||
|         return str_replace('\\', '/', $thumbName);
 | ||
|     }
 | ||
| }
 |