上传图片并生成缩略图

在项目实践中再次遇到这个这个功能的开发,重新温习了一遍,把代码注释详细得写出来了。发现这种总结式的学习方法还是会比较有效对吧,以后忘了能再回头来看看=.=

这里写图片描述

这里写图片描述

直接上代码

主要的html代码:
(要注意在上传文件时,form的enctype定义MIME编码,以二进制数据的形式上传)


<body>
        <form method="post" enctype="multipart/form-data" >
            <input type="file" name="file">
            <input type="submit" name="sm" value="上传">
        </form>

</body>

php动态实现代码:


if(isset($_POST['sm'])){
       //var_dump($_FILES['file']);  
       foreach($_FILES['file'] as $key => $value){
           $$key = $value ;
           //echo "$$key "."$key "."$value     ";
       }
           if($error){
               echo "<script> alert ('文件上传出错!')</script>";
               exit;
           }
           if($type!='image/jpeg' && $type!='image/png' ){
               echo "<script> alert ('文件类型有错!')</script>";
               exit;
           }
          $reasult=move_uploaded_file($tmp_name,'./upload/'.$name);
          if($reasult){
              $dst_w=52; //目标图片的宽
              $dst_h=42; //目标图片的长
              $dst_image=imagecreatetruecolor ($dst_w , $dst_h ) ; 
              $src_image=imagecreatefromjpeg('./upload/'.$name); 
              $dst_x=0; //目标图片的起始x坐标
              $dst_y=0; //目标图片的起始y坐标
              $src_x=0;//源图片的起始x坐标
              $src_y=0;//源图片的起始y坐标
              $src=getimagesize('./upload/'.$name); //获取源图片大小,以数组方式返回宽高等信息,具体用var_damp()输出查看
              //var_dump($src);
              $src_w=$src[0];
              $src_h=$src[1];

              imagecopyresampled ( $dst_image , $src_image , $dst_x , $dst_y ,$src_x ,  $src_y , $dst_w , $dst_h ,  $src_w , $src_h );

              $newfile='./upload/thumb/'.$name;
              imagejpeg($dst_image, $newfile, 100); 
              imagedestroy($dst_image );
              imagedestroy($src_image );  //释放和暂存图片的内存
              echo "<a href='./upload/{$name}'><img src='./upload/thumb/{$name}'></a>";
          }else{
              echo"<script> alert ('文件上传失败!')</script>";
          }

   }

总结下下:

涉及的点:
  • $_FILES[‘file’]
    $_FILES[]是一个二维数组,因此_FILES[‘file’]是一个一位数组,其中包含的都是上传文件的属性值,而且这些描述属性的变量名是固定的,包括:name:文件名,type:文件类型,tmp_name:临时存放的绝对路径,error:是否上传出错,size:文件大小
  • foreach($_FILES[‘file’] as $key => $value)
    我们知道在PHP中有两种数组,一种是索引数组,一种是关联数组,它们们的差别就在于,前者的下标是数字,后者的下标是字符串。而foreach循环则通常使用在下标是字符串的情况下
    其次,括号中是将数组作为键名和键值对应的方法,依次循环取
  • $$key = $value ;
    $key为键名,$value为键值,$($key)则是将键名作为字符与$组成一个变量名,再讲值赋给这个变量,这样我们使用起来就很方便,我们使用在表单中各个控件的name值取用户的输入
核心函数:
  • move_uploaded_file($tmp_name,’./upload/’.$name)
    将上传的图片从暂存的地址(绝对路径)转移到自定义的路径下
  • imagecreatetruecolor ($dst_w , $dst_h )
    生成一块空间暂时存放我们的缩略图,参数是这块图的宽高
  • imagecreatefromjpeg(‘./upload/’.$name);
    把用户上传的图片通过这个函数暂时存放到一块内存中,返回一图像标识符
  • imagecopyresampled($dst_image , $src_image , $dst_x , $dst_y ,$src_x , $src_y , $dst_w , $dst_h , $src_w , $src_h );
    主要的切割函数,平滑地生成的新图片中插入像素值,能比较好地保持图片原本的清晰度
  • imagejpeg($dst_image, $newfile, 100);
    将 dst_image 图像以 newfile 为文件名创建一个 JPEG 图像,图片质量是100(最高)(类似于把生成好的缩略图从内存中取出,存储起来)

到此为止是比较粗糙的,如果要灵活使用的话,还要再润色,本博客只用来记录个人总结的一些核心的点。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值