154 lines
4.9 KiB
PHP
154 lines
4.9 KiB
PHP
<?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 = app()->getRootPath() . 'public/' . ltrim($src, '/');
|
||
if (is_file($realPath)) {
|
||
$img = TImage::open($realPath);
|
||
list($img_w, $img_h) = $img->size();
|
||
if ($max > 0 && $img_w > $max) {
|
||
$img->thumb($max, $max * ($img_h / $img_w))->save($realPath);
|
||
}
|
||
}
|
||
}
|
||
|
||
// public static function webResize($src, $width = 1920, $height = 500)
|
||
// {
|
||
//
|
||
// $realPath = app()->getRootPath() . 'public/' . ltrim($src, '/');
|
||
// if (is_file($realPath)) {
|
||
// $img = TImage::open($realPath);
|
||
// list($img_w, $img_h) = $img->size();
|
||
// if ($width > 0 && $img_w > $width) {
|
||
// $img->thumb($width, $width * ($img_h / $img_w))->save($realPath);
|
||
// }
|
||
// $ext = explode(".", $src);
|
||
// return $ext[0] . "_" . $width . "_" . $height . ".".$ext[1];
|
||
// }
|
||
// return $src;
|
||
// }
|
||
|
||
|
||
/**
|
||
* 添加水印
|
||
* 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 '';
|
||
}
|
||
$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);
|
||
}
|
||
}
|