七空幻音LOGO

七空幻音

PHP处理表单上传的图片尺寸2015-11-19 01:54:51

制作网站的时候肯定会用到图片,那么一个正常的网站(前端+后台)那肯定会有图片了,图片难免会有大图或小图,当别人访问你网站的时候首页比如有4张幻灯片图片,每张都1M左右也就意味着别人访问网站首先需要花费4M的流量进入网站,而你网站服务器带宽如果很慢那就注定了别人访问网站的速度,一个优秀的网站必定会有首页图片的缩略图,不然别人访问网站就会非常慢!

PHP有专用的图片处理函数,PHP的GD库就能够帮助我们制作图片、打水印、获取图像信息、制作登陆验证码等等强大的功能。

PHPAPI文档中明确的给出了很多图片处理函数,这里我们对于处理图片尺寸只需要几个即可。

上图是使用表单上传图片后进行处理后的自定义尺寸图片。

HTML代码只需要一个file类型表单和一个submit按钮即可,form的enctype类型在PHP中明确要求使用multipart/form-data

HTML:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="img"/>
    <input type="submit" value="上传" name="upload"/>
</form>
PHP处理图片:


<?php
if(@$_POST['upload']) {
if (is_uploaded_file($_FILES['img']['tmp_name'])) {//判断是否是https post上传
    $upimg = $_FILES['img']['tmp_name'];
    $type = $_FILES['img']["type"];
    $name = $_FILES['img']['name'];
    switch ($type) {//判断上传的图片类型
        case 'image/jpeg':
            $upload = 1;
            break;
        case 'image/png':
            $upload = 1;
            break;
        case 'image/bmp':
            $upload = 1;
            break;
        case 'image/gif':
            $upload = 1;
            break;
        default:
            echo "上传图片失败,请检查文件类型,当前持:Jpg,Png,Bmp,Gif格式!";
    }
    if (@$upload == 1) {//判断是否是上面4个类型中的其中一个
        $path = 'upimg/' . $name;
        move_uploaded_file($upimg, $path);
//上传完成后调用处理图片自定义函数
        user_avart($path, $name, $type);
    }
}
}

function user_avart($path,$name,$type){
    $img = $path;
    $width = 100;//设置新图片的宽度及高度,如果不用固定宽度高度,可以判断当前高度宽度来设置
    $height= 100;
    list($width_max, $height_max) = getimagesize($img);//getimagesize用list直接获取图片信息的数组0和1的位置数据
    $images = imagecreatetruecolor($width,$height);//新建真彩图片
switch($type) {//判断图片类型
//开始将刚才上传的图片创建一张(必须确保刚才上传的图片已经处于服务器文件夹中)
        case 'image/jpeg':
            $im = imagecreatefromjpeg($path);
            break;
//png格式需要注意透明度必须用imagealphablending和imagesavealpha保留,否则会出现黑色背景作为透明背景
        case 'image/png':
            $im = imagecreatefrompng($path);
            imagealphablending($images, false);
            imagesavealpha($images, true);
            break;
        case 'image/gif':
            $im = imagecreatefromgif($path);
            break;
        case 'image/bmp':
            $im = imagecreatefromwbmp($path);
            break;
        default:
            echo "错误!";
    }
//拷贝图片至新图片 参数:
//新图片->源图片->新图片开始位置X->新图片位置Y->源图片X->源图片Y->新图片宽度->新图片高度->源图片高度->源图片宽度
    imagecopyresampled($images,$im,0,0,0,0,$width,$height,$width_max,$height_max);
switch($type) {//再次判断类型
//输出图片到upimg/目录下  jpeg类型可以有第三个参数:  类型为整数,设置清晰度
        case 'image/jpeg':
            imagejpeg($images, "upimg/avart_" . $name);
            break;
        case 'image/png':
            imagepng($images, "upimg/avart_" . $name);
            break;
        case 'image/gif':
            imagegif($images, "upimg/avart_" . $name);
            break;
        case 'image/bmp':
            imagewbmp($images, "upimg/avart_" . $name);
            break;
        default:
            echo "错误!";
    }
imagedestroy($images);//关闭图片内存
}
?>


写完上面代码,我拿到编辑器里面是可以实现的,以上支持4种图片转换,输出的图片类型和上传的类型相同图片尺寸函数很简单,以上处理是4种常用图片的处理尺寸方法

详细图片
载入中...