作者:Mister-Sky_724 | 来源:互联网 | 2018-05-07 13:55
THINKPHP3.2.3实现后台自定义图片上传格式、大小;添加水印的条件(宽度大于多少高度大于多少才会添加水印)、水印类型(文字和图片)、水印文字的颜色和大小,水印图片上传,水印的位置以及透明度的配置演示地址请访问www.gouguoyin.cnphp32.html
THINKPHP3.2.3实现后台自定义图片上传格式、大小;添加水印的条件(宽度大于多少高度大于多少才会添加水印)、水印类型(文字和图片)、水印文字的颜色和大小,水印图片上传,水印的位置以及透明度的配置 演示地址请访问http://www.gouguoyin.cn/php/32.html
THINKPHP3.2.3实现后台自定义图片上传格式、大小;添加水印的条件(宽度大于多少高度大于多少才会添加水印)、水印类型(文字和图片)、水印文字的颜色和大小,水印图片上传,水印的位置以及透明度的配置
演示地址请访问http://www.gouguoyin.cn/php/32.html
ThinkPHP
下面开始教程
一、数据库
首页要在数据库创建一个网站配置表,各个字段说明如下
CREATE TABLE IF NOT EXISTS `go_config` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`field` varchar(255) NOT NULL COMMENT '属性字段',
`title` varchar(255) NOT NULL COMMENT '字段标题',
`mark` varchar(255) NOT NULL COMMENT '备注信息,主要用于placeholder显示',
`field_type` varchar(255) NOT NULL DEFAULT 'string' COMMENT '字段类型,string:字符串 longstring:长字符串 phone:手机号 email:邮箱 url:链接地址 bool:布尔 text:多行文本 editor:编辑器 pic:图片 file:文件,默认string',
`config_type` varchar(255) NOT NULL DEFAULT 'site' COMMENT '配置类型',
`value` varchar(255) NOT NULL COMMENT '字段值',
`is_system` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否是系统字段,0:否 1:是 ,系统字段无法删除',
`is_required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否必填,1:必填 0:非必填,默认0',
`sort` int(10) NOT NULL DEFAULT '1' COMMENT '排序',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态,1:正常,0:回收站,默认1',
`add_time` datetime NOT NULL COMMENT '添加时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `field` (`field`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统配置表' AUTO_INCREMENT=1 ;
二、控制器
在项目的application/Admin/Controller/目录下建立ConfigController.class.php控制器,代码如下
display('config_upload');
}
//保存上传配置
public function upload_save()
{
$data = I('post.');
foreach ($data as $k => $v) {
$result = M('Config')->where(array('field' => $k))->save(array('value' => $v));
}
$this->success('上传设置保存成功', U('Admin/Config/upload'));
}
}
三、视图模板
在项目的application/Admin/View/Config目录下建立config_upload.html的模板,代码如下
{include file="Public/header" title="上传设置"/}
{include file="Public/sidebar"/}
编辑上传配置信息
上传图片宽度大于:
上传图片高度大于:
×
上传图片宽度大于:
上传图片高度大于:
{$upload_watermark_type = getConfigValue('upload_watermark_type')}
文字
图片
×
{$upload_watermark_position = getConfigValue('upload_watermark_position')}
{include file="Public/footer"/}
四、使用方法
在项目的application/Common/Helper目录(没有Helper目录请自行创建)下建立Upload.class.php助手函数库,代码如下
0);
//获取上传类型image、flash、media、file
//从数据库获取上传配置信息
$max_size = getConfigValue('upload_file_size')*1024*1024;
//允许上传的图片后缀
$upload_pic_suffix = getConfigValue('upload_pic_suffix');
$pic_ext_arr = explode('|', $upload_pic_suffix);
//允许上传的多媒体后缀
$upload_media_suffix = getConfigValue('upload_media_suffix');
$media_ext_arr = explode('|', $upload_media_suffix);
//允许上传的文件后缀
$upload_file_suffix = getConfigValue('upload_file_suffix');
$file_ext_arr = explode('|', $upload_file_suffix);
//生成缩略图默认大小
$upload_thumb_width = getConfigValue('upload_thumb_width');
$upload_thumb_height = getConfigValue('upload_thumb_height');
//水印类型
$upload_watermark_type = getConfigValue('upload_watermark_type');
//文字水印文本
$upload_watermark_text = getConfigValue('upload_watermark_text');
//文字水印颜色
$upload_watermark_color = getConfigValue('upload_watermark_color');
//文字水印大小
$upload_watermark_size = getConfigValue('upload_watermark_size');
$upload_watermark_pic_width = getConfigValue('upload_watermark_pic_width');
$upload_watermark_pic_height = getConfigValue('upload_watermark_pic_height');
//图片水印路径
$upload_watermark = '.'.getConfigValue('upload_watermark');
if(!$upload_watermark){
$upload_watermark = './Public/images/water.png';
}
//水印宽度
$upload_watermark_width = getConfigValue('upload_watermark_width');
//水印高度
$upload_watermark_height = getConfigValue('upload_watermark_height');
//水印位置
$upload_watermark_position = getConfigValue('upload_watermark_position');
//水印透明度
$upload_watermark_opacity = getConfigValue('upload_watermark_opacity');
//上传配置
$ext_arr = array(
'image' => $pic_ext_arr,
'media' => $media_ext_arr,
'file' => $file_ext_arr
);
$upload = new \Think\Upload(); // 实例化上传类
$upload->maxSize = $max_size; // 设置附件上传大小
$upload->exts = $ext_arr[$type]; // 设置附件上传类型
$upload->savePath = './'.$type. '/';
$file_info = $upload->upload();
if ($file_info) {
foreach($file_info as $info){
$file_path = './Uploads'.$info['savepath']. $info['savename'];
}
//引入图片处理类
$image = new \Think\Image();
$image->open($file_path);
$width = $image->width();
$height = $image->height();
//生成缩略图
//$image->crop($upload_thumb_width, $upload_thumb_height, 1)->save('./crop.jpg');
//添加水印
if($is_water && $width >= $upload_watermark_pic_width && $height>= $upload_watermark_pic_height){
if($upload_watermark_type == 2){
//添加图片水印
$image->water($upload_watermark, $upload_watermark_position, $upload_watermark_opacity)->save($file_path);
}else{
//添加文字水印
$image->text($upload_watermark_text, './Public/font/vista.ttf', $upload_watermark_size, $upload_watermark_color, $upload_watermark_position)->save($file_path);
}
}
$base_url = './Uploads/';
$return['url'] = substr($base_url, 1).$info['savepath']. $info['savename'];
} else {
$return['error'] = 1;
$return['message'] = $upload->getError();
}
exit(json_encode($return));
}
}
在控制器里使用方法:
引入助手函数库
use Common\Helper\Upload;调用上传函数
//$is_thumb 是否启用缩略图 ,$is_water是否启用水印
$pic_data = Upload::index($type='image', $is_thumb=0, $is_water=0);
$pic_data数组里返回有上传图片的路径url,如果上传失败,则会返回错误代码和错误信息。有了上传图片的路径就可以对上传图片进行入库等操作了。
注:为方便大家使用,特将核心代码打包上传,大家请点击“下载源码”按钮下载打包文件。
源码下载地址http://www.gouguoyin.cn/php/32.html