php上传图片、压缩图、缩略图

效果图如下:

在这里插入图片描述

首先需要一个上传文件页面index.html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>图片压缩上传</title>
</head>
<body>
  <!-- action为空表示提交到当前页面  enctype编码格式 -->
  <form action="" method="post" enctype="multipart/form-data">
    <!-- 上传文件的名称为img -->
    <input type="file" name="img" value="image/*">
     <button type="submit" name="button">压缩上传图片</button>
  </form>
</body>
</html>

接下来用index.php文件后端接收:

<?php

//empty():检查一个变量是否为空  /  $_FILES数组:接收上传的文件
if(empty($_FILES)){ //提交的文件是否为空
  //没有文件则显示提交页面
  include 'index.html';
}else{
  //获取上传的图片信息
  $file = $_FILES['img'];
  //原图
  //imagecreatefromstring — 从字符串中的图像流新建一图像 
  //file_get_contents — 将整个文件读入一个字符串 ($file['tmp_name']是图片地址)
  $dst_image = imagecreatefromstring(file_get_contents($file['tmp_name']));
  //获取图片宽高
  list($file_width,$file_height) = getimagesize($file['tmp_name']);

  //定义缩略图宽度
  $width = 200;
  //高度自适应
  $height = $file_height / $file_width * $width;
  //缩略图
  $thumb_img = imagecreatetruecolor($width,$height);
  
  //压缩图
  //imagecreatetruecolor — 新建一个真彩色图像
  $compress_img = imagecreatetruecolor($file_width,$file_height);
  //文件名和后缀以'/'分开 得到一个$suffix数组
  $file_type = explode('/',$file['type']);
  $img_types = ['jpeg','png','gif'];
  //获取图片后缀
  $img_type = (in_array($file_type[1],$img_types)) ? $file_type[1] : 'png';
  //设置图片上传名称 uniqid基于当前时间微妙数计算的唯一的ID
  $img_name = uniqid().'.'.$img_type;
  //通过图片类型设置不同格式上传至文件
  $fn_name = 'image'.$img_type;

  //图片存储路径
  $thumb_path = './thumb/'; //缩略图存放路径
  $compress_path = './compress/'; //压缩图存放路径
  $orig_path = './orig/'; //原始图存放路径

  //该目录是否存在  || 不存在创建该目录
  is_dir($thumb_path) || mkdir($thumb_path);
  is_dir($compress_path) || mkdir($compress_path);
  is_dir($orig_path) || mkdir($orig_path);

  //缩略图
  //imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。 
  //(目标图象,源图象,目标X坐标,目标y坐标,源的X,源的Y,目标宽度,目标高度,源图象的宽度,源图象的高度)
  imagecopyresampled($thumb_img,$dst_image,0,0,0,0,$width,$height,$file_width,$file_height);
  //上传缩略图片(图片w尺寸200,存储路径)
  $fn_name($thumb_img,$thumb_path.$img_name);

  //上传压缩图(图片尺寸不变)
  imagecopyresampled($compress_img,$dst_image,0,0,0,0,$file_width,$file_height,$file_width,$file_height);
  $fn_name($compress_img,$compress_path.$img_name);
  
  //上传原图
  $fn_name($dst_image,$orig_path.$img_name);

  //输出图片
  echo "<img src='".$thumb_path.$img_name." ' /> <br>";
  echo "<img src='".$compress_path.$img_name." ' /> <br>";
  echo "<img src='".$orig_path.$img_name." ' /> <br>";

};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值