You've already forked EasyImages2.0
mirror of
https://github.com/icret/EasyImages2.0.git
synced 2025-12-13 11:43:58 +08:00
del
This commit is contained in:
310
libs/WaterMask.php
Normal file
310
libs/WaterMask.php
Normal file
@@ -0,0 +1,310 @@
|
||||
<?php
|
||||
// https://blog.csdn.net/MyDream229/article/details/80009012
|
||||
class Imgs
|
||||
{
|
||||
/**
|
||||
* 取得图片宽
|
||||
* @param string $src 图片相对路径或绝对路径
|
||||
*/
|
||||
public static function get_width($src)
|
||||
{
|
||||
return imagesx($src);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取得图片高
|
||||
* @param string $src 图片相对路径或绝对路径
|
||||
*/
|
||||
public static function get_height($src)
|
||||
{
|
||||
return imagesy($src);
|
||||
}
|
||||
|
||||
/**
|
||||
* 图片缩放函数
|
||||
* @param string $src 图片相对路径或绝对路径
|
||||
* @param int $w 缩略图宽
|
||||
* @param int $h 缩略图高
|
||||
* @return array code:状态。msg:提示信息
|
||||
**/
|
||||
public static function thumb($src, $w = null, $h = null)
|
||||
{
|
||||
if (empty($src)) {
|
||||
return array('code' => false, 'msg' => '请指定$src');
|
||||
}
|
||||
|
||||
$temp = pathinfo($src);
|
||||
# 文件名
|
||||
$name = $temp["basename"];
|
||||
# 文件所在的文件夹
|
||||
$dir = $temp["dirname"];
|
||||
# 文件扩展名
|
||||
$extension = $temp["extension"];
|
||||
# 缩略图保存路径,新的文件名为*.thumb.jpg
|
||||
$savepath = "{$dir}/thumb_{$name}";
|
||||
|
||||
# 获取图片的基本信息
|
||||
$info = getimagesize($src);
|
||||
# 获取图片宽度
|
||||
$width = $info[0];
|
||||
# 获取图片高度
|
||||
$height = $info[1];
|
||||
if (!empty($w)) {
|
||||
$temp_w = $w; # 计算原图缩放后的宽度
|
||||
$temp_h = intval($height * ($w / $width)); # 计算原图缩放后的高度
|
||||
} else {
|
||||
$temp_w = intval($width * ($h / $height)); # 计算原图缩放后的宽度
|
||||
$temp_h = $h; # 计算原图缩放后的高度
|
||||
}
|
||||
|
||||
# 创建画布
|
||||
$temp_img = imagecreatetruecolor($temp_w, $temp_h);
|
||||
switch ($info[2]) {
|
||||
case 1:
|
||||
$im = imagecreatefromgif($src);
|
||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||
imagegif($temp_img, $savepath, 100);
|
||||
break;
|
||||
case 2:
|
||||
$im = imagecreatefromjpeg($src);
|
||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||
imagejpeg($temp_img, $savepath, 100);
|
||||
break;
|
||||
case 3:
|
||||
$im = imagecreatefrompng($src);
|
||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||
imagepng($temp_img, $savepath, 100);
|
||||
break;
|
||||
}
|
||||
imagedestroy($im);
|
||||
return $savepath;
|
||||
}
|
||||
|
||||
/**
|
||||
* 图片添加水印
|
||||
* @param string $src 1、图片相对路径或绝对路径 2、以逗号隔开的宽高值('800,600')
|
||||
* @param array 属性值:
|
||||
* res:水印资源(1、图片相对路径或绝对路径,2、字符串)
|
||||
* pos:图片水印添加的位置,取值范围:0~9
|
||||
* 0:随机位置,在1~8之间随机选取一个位置
|
||||
* 1:顶部居左 2:顶部居中
|
||||
* 3:顶部居右 4:左边居中
|
||||
* 5:图片中心 6:右边居中
|
||||
* 7:底部居左 8:底部居中
|
||||
* 9:底部居右
|
||||
* font: 字体库(相对路径或绝对路径)
|
||||
* fontSize:文字大小
|
||||
* color: 水印文字的字体颜色(255,255,255)
|
||||
* name: 图片保存名称
|
||||
* @return array code:状态、 msg:提示信息、 url:图片地址
|
||||
**/
|
||||
public static function setWater($src, $arr = array())
|
||||
{
|
||||
if (empty($src)) {
|
||||
return array('code' => false, 'msg' => '请指定$src');
|
||||
}
|
||||
|
||||
$def = array(
|
||||
'res' => '小川编程',
|
||||
'pos' => 7,
|
||||
'font' => './1.ttf',
|
||||
'fontSize' => 24,
|
||||
'color' => '255,255,255,0',
|
||||
'name' => null,
|
||||
);
|
||||
$def = array_merge($def, $arr);
|
||||
/**
|
||||
判断$src是不是图片,不是就创建画布
|
||||
*/
|
||||
if (!file_exists($src)) {
|
||||
if (empty($def['name'])) {
|
||||
return array('code' => false, 'msg' => '请指定图片名称');
|
||||
}
|
||||
|
||||
# 计算画布宽高
|
||||
$obj = explode(',', $src);
|
||||
if (count($obj) != 2) {
|
||||
return array('code' => false,
|
||||
'msg' => '请给正确的宽高,或你给的不是一个有效的地址!');
|
||||
}
|
||||
|
||||
$srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400;
|
||||
$srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300;
|
||||
# 创建画布
|
||||
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
|
||||
} else {
|
||||
# 获取图片信息
|
||||
$srcInfo = @getimagesize($src);
|
||||
$srcImg_w = $srcInfo[0];
|
||||
$srcImg_h = $srcInfo[1];
|
||||
if (empty($def['name'])) {
|
||||
$def['name'] = $src;
|
||||
}
|
||||
|
||||
# 动态的把图片导入内存中
|
||||
switch ($srcInfo[2]) {
|
||||
case 1:
|
||||
$dst_img = imagecreatefromgif($src);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$dst_img = imagecreatefromjpeg($src);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$dst_img = imagecreatefrompng($src);
|
||||
break;
|
||||
|
||||
default:
|
||||
return array('code' => false, 'msg' => '目标图片类型错误');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
/**
|
||||
计算出水印宽高
|
||||
*/
|
||||
if (!file_exists($def['res'])) {
|
||||
if (!file_exists($def['font'])) {
|
||||
return array('code' => false, 'msg' => '字体库不存在');
|
||||
}
|
||||
|
||||
$box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
|
||||
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
|
||||
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
|
||||
} else {
|
||||
$resInfo = @getimagesize($def['res']);
|
||||
$res_w = $resInfo[0];
|
||||
$res_h = $resInfo[1];
|
||||
if ($srcImg_w < $res_w || $srcImg_h < $res_h) {
|
||||
return array('code' => false, 'msg' => '水印图片过大');
|
||||
}
|
||||
|
||||
# 动态的把图片导入内存中
|
||||
switch ($resInfo[2]) {
|
||||
case 1:
|
||||
$markim = imagecreatefromgif($def['res']);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$markim = imagecreatefromjpeg($def['res']);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$markim = imagecreatefrompng($def['res']);
|
||||
break;
|
||||
|
||||
default:
|
||||
return array('code' => false, 'msg' => '水印图片类型错误');
|
||||
exit;
|
||||
}
|
||||
$logow = $res_w;
|
||||
$logoh = $res_h;
|
||||
}
|
||||
/**
|
||||
计算水印显示位置
|
||||
*/
|
||||
if ($def['pos'] == 0) {
|
||||
$def['pos'] = rand(1, 9);
|
||||
}
|
||||
|
||||
switch ($def['pos']) {
|
||||
case 1:
|
||||
$x = +10;
|
||||
$y = +10 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$x = ($srcImg_w - $logow) / 2;
|
||||
$y = +10 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$x = $srcImg_w - $logow - 10;
|
||||
$y = +10 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 4:
|
||||
$x = +10;
|
||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 5:
|
||||
$x = ($srcImg_w - $logow) / 2;
|
||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 6:
|
||||
$x = $srcImg_w - $logow - 10;
|
||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||
break;
|
||||
|
||||
case 7:
|
||||
$x = +10;
|
||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
$x = ($srcImg_w - $logow) / 2;
|
||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
$x = $srcImg_w - $logow - 10;
|
||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||
break;
|
||||
|
||||
default:
|
||||
return array('code' => false, 'msg' => '水印位置不支持');
|
||||
exit;
|
||||
}
|
||||
/**
|
||||
把图片水印或文字水印,加到目标图片中
|
||||
*/
|
||||
if (file_exists($def['res'])) {
|
||||
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
|
||||
imagedestroy($markim);
|
||||
} else {
|
||||
$rgb = explode(',', $def['color']);
|
||||
if (count($rgb) != 4) {
|
||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||
}
|
||||
|
||||
if (!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2]) || !is_numeric($rgb[3])) {
|
||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||
}
|
||||
|
||||
if ($rgb[0] > 255 || $rgb[1] > 255 || $rgb[2] > 255 || $rgb[3] > 127) {
|
||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||
}
|
||||
|
||||
$def['color'] = imagecolorallocatealpha($dst_img, $rgb[0], $rgb[1], $rgb[2], $rgb[3]);
|
||||
imagettftext($dst_img, $def['fontSize'], 0, $x,
|
||||
$y, $def['color'], $def['font'], $def['res']);
|
||||
}
|
||||
/**
|
||||
保存处理过的图片(有水印了的图片)
|
||||
*/
|
||||
$name = explode('.', $def['name']);
|
||||
$num = count($name)-1;
|
||||
switch (strtolower($name[$num])) {
|
||||
case 'jpeg':
|
||||
imagejpeg($dst_img, $def['name']);
|
||||
break;
|
||||
case 'jpg':
|
||||
imagejpeg($dst_img, $def['name']);
|
||||
break;
|
||||
case 'png':
|
||||
imagepng($dst_img, $def['name']);
|
||||
break;
|
||||
case 'gif':
|
||||
imagegif($dst_img, $def['name']);
|
||||
break;
|
||||
default:
|
||||
return array('code' => false, 'msg' => '保存图片类型有误');
|
||||
break;
|
||||
}
|
||||
# 销毁图片内存资源
|
||||
imagedestroy($dst_img);
|
||||
return array('code' => true, 'msg' => '添加水印成功', 'url' => $def['name']);
|
||||
}
|
||||
}
|
||||
@@ -31,11 +31,13 @@ echo '
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<script src="./public/static/hm.js"></script>
|
||||
<script src="public/static/paste.js"></script>
|
||||
<script src="public/static/copy_btn.js"></script>
|
||||
<script src="public/static/hm.js"></script>
|
||||
<footer class="text-muted small col-md-12" style="text-align: center">
|
||||
'.showAD('bot').'
|
||||
<hr />
|
||||
Copyright © 2018-'. date('Y').' EasyImage Powered By <code><a href="https://www.545141.com/easyimage.html" target="_blank">icret</a></code> Verson: '.$config['Version'].@$qqgroup.'
|
||||
Copyright © 2018-'. date('Y').' EasyImage Powered By <code><a href="https://www.545141.com/easyimage2.html" target="_blank">icret</a></code> Verson: '.$config['Version'].@$qqgroup.'
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -40,30 +40,26 @@ function checkLogin() {
|
||||
}
|
||||
}
|
||||
|
||||
// 检查配置文件中目录是否存在是否可写
|
||||
// 检查配置文件中目录是否存在是否可写并创建相应目录
|
||||
|
||||
function config_path(){
|
||||
global $config;
|
||||
$real_path = APP_ROOT.$config['path'];
|
||||
if(!is_dir($real_path)){
|
||||
mkdir($real_path,0777,true);
|
||||
}elseif(!is_writable($real_path)){
|
||||
chmod($real_path,0777);
|
||||
}
|
||||
//创建年目录
|
||||
$real_path = $config['path'].date('Y');
|
||||
if(!is_dir($real_path)){
|
||||
mkdir($real_path,0777);
|
||||
}elseif(!is_writable($real_path)){
|
||||
chmod($real_path,0777);
|
||||
}
|
||||
// 创建月目录
|
||||
$real_path = $real_path.'/'.date('m');
|
||||
if(!is_dir($real_path)){
|
||||
mkdir($real_path,0777);
|
||||
}elseif(!is_writable($real_path)){
|
||||
chmod($real_path,0777);
|
||||
}
|
||||
return $real_path.'/';
|
||||
global $config;
|
||||
$img_path = $config['path'].date('Y').'/'.date('m').'/'.date('d');
|
||||
|
||||
if (!is_dir($img_path)){
|
||||
mkdir($img_path,0755,true);
|
||||
}
|
||||
|
||||
if (!is_writable($img_path)){
|
||||
chmod($img_path,0755);
|
||||
}
|
||||
|
||||
return $img_path.'/';
|
||||
}
|
||||
|
||||
// 图片重命名规则
|
||||
function imgName(){
|
||||
return base_convert(date('His').mt_rand(1024,10240),10,36);
|
||||
}
|
||||
|
||||
// 设置广告
|
||||
@@ -98,7 +94,8 @@ function static_cdn(){
|
||||
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js?v3.3.1"></script>
|
||||
<script src="https://cdn.bootcss.com/zui/1.8.1/js/zui.min.js?v1.8.1"></script>
|
||||
<script src="https://cdn.bootcss.com/zui/1.8.1/lib/uploader/zui.uploader.min.js?v1.8.1"></script>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/icret/easyImages@1.5.3/static/qrcode.min.js?v1"></script>
|
||||
<script src="https://cdn.jsdelivr.net/gh/icret/easyImages@1.5.3/static/qrcode.min.js?v1"></script>
|
||||
<script src="https://cdn.bootcss.com/clipboard.js/2.0.4/clipboard.min.js?v2.0.4"></script>
|
||||
';
|
||||
|
||||
}else{
|
||||
@@ -111,6 +108,7 @@ function static_cdn(){
|
||||
<script src="../public/static/zui/js/zui.min.js?v1.8.1"></script>
|
||||
<script src="../public/static/zui/lib/uploader/zui.uploader.min.js?v1.8.1"></script>
|
||||
<script src="../public/static/qrcode.min.js?v1.0"></script>
|
||||
<script src="../public/static/clipboard.min.js?v2.0.4"></script>
|
||||
';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ echo '
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="keywords" content="'.$config['keywords'].'" />
|
||||
<meta name="description" content="'.$config['description'].'" />
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="../public/static/favicon.ico" type="image/x-icon" />
|
||||
'.static_cdn().'
|
||||
<style>
|
||||
.uploader-files{
|
||||
@@ -25,7 +25,7 @@ echo '
|
||||
<ul class="nav nav-pills">
|
||||
<li class="active"><a href="index.php">首页</a></li>
|
||||
<li><a href="https://github.com/icret/easyImages2.0" target="_blank">GitHub<span class="label label-badge label-success"></span></a></li>
|
||||
<li><a href="public/data/tinyfilemanager.php" target="_blank">管理<span class="label label-badge label-success"></span></a></li>
|
||||
<li><a href="tinyfilemanager.php" target="_blank">管理<span class="label label-badge label-success"></span></a></li>
|
||||
<li><a class="dropdown-toggle hidden-xs" data-toggle="dropdown" href="#">二维码<span class="caret"></span></a>
|
||||
<ul class="dropdown-menu">
|
||||
<input id="text" type="hidden" value=""/>
|
||||
|
||||
Reference in New Issue
Block a user