问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp5 怎么接受zyupload,上传的图片

发布网友 发布时间:2022-04-24 19:33

我来回答

1个回答

热心网友 时间:2022-05-02 04:18

引入这个类就可以

<?php
//视图表单
//支持多张图片上传
class upload {
var $dir;            //附件存放物理目录
var $time;           //自定义文件上传时间
var $allow_types;    //允许上传附件类型
var $field;          //上传控件名称
var $maxsize;        //最大允许文件大小,单位为KB
var $thumb_width;    //缩略图宽度
var $thumb_height;   //缩略图高度
var $watermark_file; //水印图片地址
var $watermark_pos;  //水印位置
var $watermark_trans;//水印透明度
//构造函数
//$types : 允许上传的文件类型 , $maxsize : 允许大小 ,  $field : 上传控件名称 , $time : 自定义上传时间
function upload($types = 'jpg|png', $maxsize = 1024, $field = 'attach', $time = '') {
$this->allow_types = explode('|',$types);
$this->maxsize = $maxsize * 1024;
$this->field = $field;
$this->time = $time ? $time : time();
}
//设置并创建文件具体存放的目录
//$basedir  : 基目录,必须为物理路径
//$filedir  : 自定义子目录,可用参数{y}、{m}、{d}
function set_dir($basedir,$filedir = '') {
$dir = $basedir;
!is_dir($dir) && @mkdir($dir,0777);
if (!empty($filedir)) {
$filedir = str_replace(array('{y}','{m}','{d}'),array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strtolower($filedir));//用string_replace把{y} {m} {d}几个标签进行替换
$dirs = explode('/',$filedir);
foreach ($dirs as $d) {
!empty($d) && $dir .= $d.'/';
!is_dir($dir) && @mkdir($dir,0777);
}
}
$this->dir = $dir;
}
//图片缩略图设置,如果不生成缩略图则不用设置
//$width : 缩略图宽度 , $height : 缩略图高度
function set_thumb ($width = 0, $height = 0) {
$this->thumb_width  = $width;
$this->thumb_height = $height;
}
//图片水印设置,如果不生成添加水印则不用设置
//$file : 水印图片 , $pos : 水印位置 , $trans : 水印透明度
function set_watermark ($file, $pos = 6, $trans = 80) {
$this->watermark_file  = $file;
$this->watermark_pos   = $pos;
$this->watermark_trans = $trans;
}
/*—————————————————————-
执行文件上传,处理完返回一个包含上传成功或失败的文件信息数组,
其中:name 为文件名,上传成功时是上传到服务器上的文件名,上传失败则是本地的文件名
dir  为服务器上存放该附件的物理路径,上传失败不存在该值
size 为附件大小,上传失败不存在该值
flag 为状态标识,1表示成功,-1表示文件类型不允许,-2表示文件大小超出
—————————————————————–*/
function execute() {
$files = array(); //成功上传的文件信息
$field = $this->field;
$keys = array_keys($_FILES[$field]['name']);
foreach ($keys as $key) {
if (!$_FILES[$field]['name'][$key]) continue;
$fileext = $this->fileext($_FILES[$field]['name'][$key]); //获取文件扩展名
$filename = date('Ymdhis',$this->time).mt_rand(10,99).'.'.$fileext; //生成文件名
$filedir = $this->dir;  //附件实际存放目录
$filesize = $_FILES[$field]['size'][$key]; //文件大小
//文件类型不允许
if (!in_array($fileext,$this->allow_types)) {
$files[$key]['name'] = $_FILES[$field]['name'][$key];
$files[$key]['flag'] = -1;
continue;
}
//文件大小超出
if ($filesize > $this->maxsize) {
$files[$key]['name'] = $_FILES[$field]['name'][$key];
$files[$key]['name'] = $filesize;
$files[$key]['flag'] = -2;
continue;
}
$files[$key]['name'] = $filename;
$files[$key]['dir'] = $filedir;
$files[$key]['size'] = $filesize;
//保存上传文件并删除临时文件
if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
move_uploaded_file($_FILES[$field]['tmp_name'][$key],$filedir.$filename);
@unlink($_FILES[$field]['tmp_name'][$key]);
$files[$key]['flag'] = 1;
//对图片进行加水印和生成缩略图,这里演示只支持jpg和png(gif生成的话会没了帧的)
if (in_array($fileext,array('jpg','png'))) {
if ($this->thumb_width) {
if ($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)) {
$files[$key]['thumb'] = 'thumb_'.$filename;  //缩略图文件名
}
}
$this->create_watermark($filedir.$filename);
}
}
}
return $files;
}
//创建缩略图,以相同的扩展名生成缩略图
//$src_file : 来源图像路径 , $thumb_file : 缩略图路径
function create_thumb ($src_file,$thumb_file) {
$t_width  = $this->thumb_width;
$t_height = $this->thumb_height;
if (!file_exists($src_file)) return false;
$src_info = getImageSize($src_file);
//如果来源图像小于或等于缩略图则拷贝源图像作为缩略图,免去操作
if ($src_info[0] <= $t_width && $src_info[1] <= $t_height) {
if (!copy($src_file,$thumb_file)) {
return false;
}
return true;
}
//按比例计算缩略图大小
if (($src_info[0]-$t_width) > ($src_info[1]-$t_height)) {
$t_height = ($t_width / $src_info[0]) * $src_info[1];
} else {
$t_width = ($t_height / $src_info[1]) * $src_info[0];
}
//取得文件扩展名
$fileext = $this->fileext($src_file);
switch ($fileext) {
case 'jpg' :
$src_img = ImageCreateFromJPEG($src_file); break;
case 'png' :
$src_img = ImageCreateFromPNG($src_file); break;
case 'gif' :
$src_img = ImageCreateFromGIF($src_file); break;
}
//创建一个真彩色的缩略图像
$thumb_img = @ImageCreateTrueColor($t_width,$t_height);
//ImageCopyResampled函数拷贝的图像平滑度较好,优先考虑
if (function_exists('imagecopyresampled')) {
@ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
} else {
@ImageCopyResized($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
}
//生成缩略图
switch ($fileext) {
case 'jpg' :
ImageJPEG($thumb_img,$thumb_file); break;
case 'gif' :
ImageGIF($thumb_img,$thumb_file); break;
case 'png' :
ImagePNG($thumb_img,$thumb_file); break;
}
//销毁临时图像
@ImageDestroy($src_img);
@ImageDestroy($thumb_img);
return true;
}
//为图片添加水印
//$file : 要添加水印的文件
function create_watermark ($file) {
//文件不存在则返回
if (!file_exists($this->watermark_file) || !file_exists($file)) return;
if (!function_exists('getImageSize')) return;
//检查GD支持的文件类型
$gd_allow_types = array();
if (function_exists('ImageCreateFromGIF')) $gd_allow_types['image/gif'] = 'ImageCreateFromGIF';
if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
if (function_exists('ImageCreateFromJPEG')) $gd_allow_types['image/jpeg'] = 'ImageCreateFromJPEG';
//获取文件信息
$fileinfo = getImageSize($file);
$wminfo   = getImageSize($this->watermark_file);
if ($fileinfo[0] < $wminfo[0] || $fileinfo[1] < $wminfo[1]) return;
if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
if (array_key_exists($wminfo['mime'],$gd_allow_types)) {
//从文件创建图像
$temp = $gd_allow_types[$fileinfo['mime']]($file);
$temp_wm = $gd_allow_types[$wminfo['mime']]($this->watermark_file);
//水印位置
switch ($this->watermark_pos) {
case 1 :  //顶部居左
$dst_x = 0; $dst_y = 0; break;
case 2 :    //顶部居中
$dst_x = ($fileinfo[0] - $wminfo[0])/2; $dst_y = 0; break;
case 3 :  //顶部居右
$dst_x = $fileinfo[0]; $dst_y = 0; break;
case 4 :  //底部居左
$dst_x = 0; $dst_y = $fileinfo[1]; break;
case 5 :  //底部居中
$dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1]; break;
case 6 :  //底部居右
$dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1]; break;
default : //随机
$dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); $dst_y = mt_rand(0,$fileinfo[1]-$wminfo[1]);
}
if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True); //设定图像的混色模式
if (function_exists('ImageSaveAlpha')) ImageSaveAlpha($temp_wm,True); //保存完整的 alpha 通道信息
//为图像添加水印
if (function_exists('imageCopyMerge')) {
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
} else {
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1]);
}
//保存图片
switch ($fileinfo['mime']) {
case 'image/jpeg' :
@imageJPEG($temp,$file);
break;
case 'image/png' :
@imagePNG($temp,$file);
break;
case 'image/gif' :
@imageGIF($temp,$file);
break;
}
//销毁零时图像
@imageDestroy($temp);
@imageDestroy($temp_wm);
}
}
}
//获取文件扩展名
function fileext($filename) {
return strtolower(substr(strrchr($filename,'.'),1,10));
}
}
?>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? tp5文件上传时怎么把图片路径和post数据一起存到数据库?(图片使用ajax提交post数据使用form提交) 5000块钱存农行定期三个月能拿到多少利息 tp5可以设置上传图片的宽高吗 国际贸易融资都有哪些项目 借网贷5000元分期三个月还一共利息300元算不算高利贷? 5000块钱存农行定期三个月后能拿多少利息 有哪几种几种形式的国际贸易融资啊 如果5000元分期24期有利息吗?如果有利息多少? 5000元放在银行半年的利息是多少? 国际贸易融资有哪些形式?如果进行分类和操作? 我想请问一下 如果我借了5000块钱 年利率是百分之24 一年以后我一共要还多少 5000元钱存三个月利息是多少? 国际结算 进出口贸易融资有哪些 国际贸易的融资方式 如果贷款5000分24期还,年利息百分之24 除去本金5000利息应该是多少 2017考研数学一比往年(除去16年)简单很多吗?怎么网上全是晒高分的。 17年考研数学还会难吗 如何评价2017考研数学三? 我在阎良怎么贷款呢? 17考研数学,如何打好基础? 国际贸易融资的品种 借了5000块钱,然后分了24个月。利息是多少?怎么算的?可以帮我回答一下吗? thinkphp5中怎么把form表单数据提交到数据库并且图片提交到指定路径 招行5000元人民币本金存三个月定期,利息有多少? 请问国际贸易中的融资工具有哪些?谢谢. 在tp里面怎么使用unlink函数删除上传的图片文件? 5000块钱三个月的利息是多少按死期算 信用证结算方式下进出口融资贸易有哪些 thinkPHP3.2.3文件上传类多张图片上传怎么只有第一张图片被上传 5000元3个月利息是多少 thinkphp 多图上传,如何把图片路径保存到数据库? 汇款结算方式下出口商的国际贸易融资方式是什么,写论文需要,求大神给我答案,必定感谢 thinkphp xheditor 图片上传问题 Thinkphp5 删除上传文件 thinkphp6图片上传成功后怎样返回具体的url? asp如何实现文件上传功能 用thinkphp怎么在自己的网站上传和显示视频。 editplus怎么导入thinkphp框架 tp5 查询数据库的数据,并赋值给数组,怎么将赋值后的数组传到视图层_百 ... thinkphp文件上传后怎么删除