PHP 图片上传并生成缩略图类
发布时间:2020-05-26 14:54:02 所属栏目:PHP 来源:互联网
导读:PHP 图片上传并生成缩略图类
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 <?PHP
/**
* 上传图片
*/
class imgUpload{
static protected $a;
protected $formName; //表单名称
protected $directory; //文件上传至目录
protected $maxSize; //最大文件上传大小
protected $canUpload; //是否可以上传
protected $doUpFile; //上传的文件名
protected $sm_File; //缩略图名称
private function __construct($_formName='file',$_directory='./images/uploads/',$_maxSize=1048576){ //1024*1024=1M
//初始化参数
$this->formName = $_formName;
$this->directory = $_directory;
$this->maxSize = $_maxSize;
$this->canUpload = true;
$this->doUpFile = '';
$this->sm_File = '';
}
//判断图片是否属于允许格式内
static public function Type($_formName='file'){
$_type = $_FILES[$_formName]['type'];
switch ($_type){
case 'image/gif':
if (self::$a==NULL)
self::$a = new imgUpload($_formName);
break;
case 'image/pjpeg':
if (self::$a==NULL)
self::$a = new imgUpload($_formName);
break;
case 'image/x-png':
if (self::$a==NULL)
self::$a = new imgUpload($_formName);
break;
default:
self::$a = false;
}
return self::$a;
}
//获取文件大小
public function getSize($_format='K'){
if ($this->canUpload) {
if (0 == $_FILES[$this->formName]['size']) {
$this->canUpload = false;
return $this->canUpload;
break;
}
switch ($_format){
case 'B':
return $_FILES[$this->formName]['size'];
break;
case 'K':
return round($_FILES[$this->formName]['size'] / 1024);
break;
case 'M':
return round($_FILES[$this->formName]['size'] / (1024*1024),2);
break;
}
}
}
//获取文件类型
public function getExt(){
if ($this->canUpload) {
$_name = $_FILES[$this->formName]['name'];
$_nameArr = explode('.',$_name);
$_count = count($_nameArr)-1;
}
return $_nameArr[$_count];
}
//获取文件名称
public function getName(){
if ($this->canUpload) {
return $_FILES[$this->formName]['name'];
}
}
//新建文件名
public function newName(){
return date('YmdHis').rand(0,9);
}
//上传文件
public function upload(){
if ($this->canUpload)
{
$_getSize = $this->getSize('B');
if (!$_getSize)
{
return $_getSize;
break;
}
else
{
$_newName = $this->newName();
$_ext = $this->getExt();
$_doUpload = move_uploaded_file($_FILES[$this->formName]['tmp_name'],$this->directory.$_newName.".".$_ext);
if ($_doUpload)
{
$this->doUpFile = $_newName;
}
return $_doUpload;
}
}
}
//创建缩略图
public function thumb($_dstChar='_m',$_max_len=320){ //$_dstChar:_m,_s
if ($this->canUpload && $this->doUpFile != "") {
$_ext = $this->getExt();
$_srcImage = $this->directory.$this->doUpFile.".".$_ext;
//得到图片信息数组
$_date = getimagesize($_srcImage,&$info);
$src_w = $_date[0]; //源图片宽
$src_h = $_date[1]; //源图片高
$src_max_len = max($src_w,$src_h); //求得长边
$src_min_len = min($src_w,$src_h); //求得短边
$dst_w = ''; //目标图片宽
$dst_h = ''; //目标图片高
//宽高按比例缩放,最长边不大于$_max_len
if ($src_max_len>$_max_len)
{
$percent = $src_min_len / $src_max_len;
if ($src_w == $src_max_len)
{
$dst_w = $_max_len;
$dst_h = $percent * $dst_w;
}
else
{
$dst_h = $_max_len;
$dst_w = $percent * $dst_h;
}
}
else
{
$dst_w = $src_w;
$dst_h = $src_h;
}
//建立缩略图时,源图片的位置
$src_x = '';
$src_y = '';
//判断如果缩略图用于logo,将对其进行裁减
if ('s_' == $_dstChar) {
$src_x = $src_w * 0.10;
$src_y = $src_h * 0.10;
$src_w *= 0.8;
$src_h *= 0.8;
}
//判断图片类型并创建对应新图片
switch ($_date[2]){
case 1:
$src_im = imagecreatefromgif($_srcImage);
break;
case 2:
$src_im = imagecreatefromjpeg($_srcImage);
break;
case 3:
$src_im = imagecreatefrompng($_srcImage);
break;
case 8:
$src_im = imagecreatefromwbmp($_srcImage);
break;
}
//创建一幅新图像
if ($_date[2]==1) { //gif无法应用imagecreatetruecolor
$dst_im = imagecreate($dst_w,$dst_h);
}else {
$dst_im = imagecreatetruecolor($dst_w,$dst_h);
}
//对这副图像进行缩略图copy
// $bg = imagecolorallocate($dst_im,255,0);
imagecopyresized($dst_im,$src_im,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h );
//对图片进行抗锯齿操作
imageantialias($dst_im,true);
switch ($_date[2]) {
case 1:
$cr = imagegif($dst_im,$this->directory.$this->doUpFile.$_dstChar.".".$_ext,100);
break;
case 2:
$cr = imagejpeg($dst_im,100);
break;
case 3://imagepng有问题,所以在这里用imagejpg代替
$cr = imagejpeg($dst_im,100);
break;
}
// $cr = imagejpeg($dst_im,$this->directory.$_dstChar.$this->doUpFile,90);
if ($cr) {
$this->sm_File = $this->directory.$this->doUpFile.$_dstChar.".".$_ext;
return $this->sm_File;
}else {
return false;
}
}
imagedestroy($dst_im);
imagedestroy($cr);
}
//得到上传后的文件名
public function getUpFile(){
if ($this->doUpFile!='') {
$_ext = $this->getExt();
return $this->doUpFile.".".$_ext;
}else {
return false;
}
}
//得到上传后的文件全路径
public function getFilePatch(){
if ($this->doUpFile!='') {
$_ext = $this->getExt();
return $this->directory.$this->doUpFile.".".$_ext;
}else {
return false;
}
}
//得到缩略图文件全路径
public function getThumb(){
if ($this->sm_File!='') {
return $this->sm_File;
}else {
return false;
}
}
//得到上传文件的路径
public function getDirectory(){
if ($this->directory!='') {
return $this->directory;
}else {
return false;
}
}
}
?>
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
