PHP实现图片上传并压缩


Posted in PHP onDecember 22, 2015

本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下

使用到三个文件

  • connect.php:连接数据库
  • test_upload.php:执行SQL语句
  • upload_img.php:上传图片并压缩

三个文件代码如下:
连接数据库:connect.php

<?php
$db_host = '';
$db_user = '';
$db_psw = '';
$db_name = '';
$db_port = '';
$sqlconn=new mysqli($db_host,$db_user,$db_psw,$db_name);
$q="set names utf8;";
$result=$sqlconn->query($q);
if (mysqli_connect_errno()) {
 printf("Connect failed: %s\n", mysqli_connect_error());
 exit();
}
?>

执行SQL语句:test_upload.php

<?php
require ("connect.php");
require ("upload_img.php");
$real_img=$uploadfile; 
$small_img=$uploadfile_resize;
$insert_sql = "insert into img (real_img,small_img) values (?,?)";
$result = $sqlconn -> prepare($insert_sql);
$result -> bind_param("ss", $real_img,$small_img);
$result -> execute();
?>

上传图片并压缩upload_img.php

<?php 
//设置文件保存目录
$uploaddir = "upfiles/"; 
//设置允许上传文件的类型
$type=array("jpg","gif","bmp","jpeg","png"); 

//获取文件后缀名函数 
function fileext($filename) 
{ 
 return substr(strrchr($filename, '.'), 1); 
} 

//生成随机文件名函数 
function random($length) 
{ 
 $hash = 'CR-'; 
 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; 
 $max = strlen($chars) - 1; 
 mt_srand((double)microtime() * 1000000); 
 for($i = 0; $i < $length; $i++) 
 { 
  $hash .= $chars[mt_rand(0, $max)]; 
 } 
 return $hash; 
} 

$a=strtolower(fileext($_FILES['filename']['name'])); 

//判断文件类型 
if(!in_array(strtolower(fileext($_FILES['filename']['name'])),$type)) 
{ 
 $text=implode(",",$type); 
 $ret_code=3;//文件类型错误
 $page_result=$text;
 $retArray = array('ret_code' => $ret_code,'page_result'=>$page_result);
 $retJson = json_encode($retArray);
 echo $retJson;
 return;
} 

//生成目标文件的文件名 
else
{ 
 $filename=explode(".",$_FILES['filename']['name']); 
 do 
 { 
  $filename[0]=random(10); //设置随机数长度 
  $name=implode(".",$filename); 
  //$name1=$name.".Mcncc"; 
  $uploadfile=$uploaddir.$name; 
 } 

 while(file_exists($uploadfile)); 

 if (move_uploaded_file($_FILES['filename']['tmp_name'],$uploadfile)) 
 { 
  if(is_uploaded_file($_FILES['filename']['tmp_name'])) 
  {
   $ret_code=1;//上传失败
  } 
 else 
 {//上传成功
  $ret_code=0;
 } 
 } 
$retArray = array('ret_code' => $ret_code);
$retJson = json_encode($retArray);
echo $retJson;
}

//压缩图片

$uploaddir_resize="upfiles_resize/";
$uploadfile_resize=$uploaddir_resize.$name;

//$pic_width_max=120;
//$pic_height_max=90;
//以上与下面段注释可以联合使用,可以使图片根据计算出来的比例压缩

$file_type=$_FILES["filename"]['type'];

function ResizeImage($uploadfile,$maxwidth,$maxheight,$name)
{
 //取得当前图片大小
 $width = imagesx($uploadfile);
 $height = imagesy($uploadfile);
 $i=0.5;
 //生成缩略图的大小
 if(($width > $maxwidth) || ($height > $maxheight))
 {
  /*
  $widthratio = $maxwidth/$width;
  $heightratio = $maxheight/$height;
  
  if($widthratio < $heightratio)
  {
   $ratio = $widthratio;
  }
  else
  {
    $ratio = $heightratio;
  }
  
  $newwidth = $width * $ratio;
  $newheight = $height * $ratio;
  */
  $newwidth = $width * $i;
  $newheight = $height * $i;
  if(function_exists("imagecopyresampled"))
  {
   $uploaddir_resize = imagecreatetruecolor($newwidth, $newheight);
   imagecopyresampled($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }
  else
  {
   $uploaddir_resize = imagecreate($newwidth, $newheight);
   imagecopyresized($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  }
  
  ImageJpeg ($uploaddir_resize,$name);
  ImageDestroy ($uploaddir_resize);
 }
 else
 {
  ImageJpeg ($uploadfile,$name);
 }
}



if($_FILES["filename"]['size'])
{
 if($file_type == "image/pjpeg"||$file_type == "image/jpg"|$file_type == "image/jpeg")
 {
  //$im = imagecreatefromjpeg($_FILES[$upload_input_name]['tmp_name']);
  $im = imagecreatefromjpeg($uploadfile);
 }
 elseif($file_type == "image/x-png")
 {
  //$im = imagecreatefrompng($_FILES[$upload_input_name]['tmp_name']);
  $im = imagecreatefromjpeg($uploadfile);
 }
 elseif($file_type == "image/gif")
 {
  //$im = imagecreatefromgif($_FILES[$upload_input_name]['tmp_name']);
  $im = imagecreatefromjpeg($uploadfile);
 }
 else//默认jpg
 {
  $im = imagecreatefromjpeg($uploadfile);
 }
 if($im)
 {
  ResizeImage($im,$pic_width_max,$pic_height_max,$uploadfile_resize);
 
  ImageDestroy ($im);
 }
} 
?>

请按照现实情况更改connect.php,test_upload.php中对应的信息。

以上就是PHP实现图片上传并压缩的方法,希望对大家的学习php程序设计有所帮助

PHP 相关文章推荐
PHP编程中八种常见的文件操作方式
Nov 19 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
php获取当前url地址的方法小结
Jan 10 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
yii2的restful api路由实例详解
May 14 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
php双向队列实例讲解
Nov 17 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 #PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 #PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 #PHP
反射调用private方法实践(php、java)
Dec 21 #PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 #PHP
变量在 PHP7 内部的实现(二)
Dec 21 #PHP
变量在 PHP7 内部的实现(一)
Dec 21 #PHP
You might like
PHP中替换换行符的几种方法小结
2012/10/15 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
详解YII关联查询
2016/01/10 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
python实现RSA加密(解密)算法
2016/02/17 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
django自定义模板标签过程解析
2019/12/14 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
营业员个人总结的自我评价
2013/10/25 职场文书
会计实习自我鉴定
2013/12/04 职场文书
护理个人求职信范文
2014/01/08 职场文书
高中军训感想300字
2014/03/04 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
法定代表人身份证明书
2015/06/18 职场文书