PHP支持多种格式图片上传(支持jpg、png、gif)


Posted in PHP onNovember 03, 2011

此处一次支持上传2个图片,上传后生成原图和质量较差的图,原图用于保存质量高的图片,质量差的图用于网页显示。
PHP Code

<?php 
include_once("db.php"); 
include_once("dbinfo.php"); 
$connector = new nmdb($host, $username, $password); 
$connector -> select_db($database); 
$work_group = check_input($_POST['work_group']); 
$name = check_input($_POST['name']); 
$tel = check_input($_POST['tel']); 
$id_card = check_input($_POST['id_card']); 
$work_name = check_input($_POST['work_name']); 
$place = check_input($_POST['place']); 
$work1 = check_input($_POST['work1']); 
date_default_timezone_set('PRC'); 
$date = date("Y-m-d H:i:s"); 
$quality = 100; 
$quality2 = 70; 
$quality_png = 9; 
$quality2_png = 7; 
if(isset($_FILES['work1']) && $_FILES['work1']['error']==0) 
{ 
$size = getimagesize($_FILES['work1']['tmp_name']); 
$original = $_FILES['work1']['tmp_name']; 
$type = $_FILES['work1']['type']; 
//echo $type; 
$target_name = date('YmdHis').'_'.preg_replace('`[^a-z0-9-_.]`i','',$_FILES['work1']['name']); 
$work1 = $target_name; 
$target = dirname(__FILE__).'/uploads/'.$target_name; 
switch($type) 
{ 
case "image/jpeg": 
$resultImage = imagecreatefromjpeg($original); 
imagejpeg($resultImage, $target, $quality); 
break; 
case "image/png": 
$resultImage = imagecreatefrompng($original); 
imagepng($resultImage, $target, $quality_png); 
break; 
case "image/gif": 
$resultImage = imagecreatefromgif($original); 
imagegif($resultImage, $target, $quality); 
break; 
default : 
die("不支持此文件类型"); 
exit; 
} 
$work1_small = $target_name; 
$target = dirname(__FILE__).'/uploads/small/'.$target_name; 
switch($type) 
{ 
case "image/jpeg": 
$resultImage = imagecreatefromjpeg($original); 
imagejpeg($resultImage, $target, $quality2); 
break; 
case "image/png": 
$resultImage = imagecreatefrompng($original); 
imagepng($resultImage, $target, $quality2_png); 
break; 
case "image/gif": 
$resultImage = imagecreatefromgif($original); 
imagegif($resultImage, $target, $quality2); 
break; 
default : 
die("不支持此文件类型"); 
exit; 
} 
} 
if(isset($_FILES['work2']) && $_FILES['work2']['error']==0) 
{ 
$size = getimagesize($_FILES['work2']['tmp_name']); 
$original = $_FILES['work2']['tmp_name']; 
$type = $_FILES['work2']['type']; 
$target_name = date('YmdHis').'_'.preg_replace('`[^a-z0-9-_.]`i','',$_FILES['work2']['name']); 
$work2 = $target_name; 
$target = dirname(__FILE__).'/uploads/'.$target_name; 
switch($type) 
{ 
case "image/jpeg": 
$resultImage = imagecreatefromjpeg($original); 
imagejpeg($resultImage, $target, $quality); 
break; 
case "image/png": 
$resultImage = imagecreatefrompng($original); 
imagepng($resultImage, $target, $quality_png); 
break; 
case "image/gif": 
$resultImage = imagecreatefromgif($original); 
imagegif($resultImage, $target, $quality); 
break; 
default : 
die("不支持此文件类型"); 
exit; 
} 
$work2_small = $target_name; 
$target = dirname(__FILE__).'/uploads/small/'.$target_name; 
switch($type) 
{ 
case "image/jpeg": 
$resultImage = imagecreatefromjpeg($original); 
imagejpeg($resultImage, $target, $quality2); 
break; 
case "image/png": 
$resultImage = imagecreatefrompng($original); 
imagepng($resultImage, $target, $quality2_png); 
break; 
case "image/gif": 
$resultImage = imagecreatefromgif($original); 
imagegif($resultImage, $target, $quality2); 
break; 
default : 
die("不支持此文件类型"); 
exit; 
} 
} 
$sql="insert into photo(work_group,name,tel,id_card,work_name,place,work,work_small,date) values('$work_group','$name','$tel','$id_card','$work_name','$place','$work1','$work1_small','$date')"; 
//echo $sql; 
$result = $connector -> query($sql) or die(mysql_error()); 
if($work2 != "" && $work2_small != null) 
{ 
$sql2="insert into photo(work_group,name,tel,id_card,work_name,place,work,work_small,date) values('$work_group','$name','$tel','$id_card','$work_name','$place','$work2','$work2_small','$date')"; 
$result2 = $connector -> query($sql2) or die(mysql_error()); 
} 
$connector -> close($connector); 
$page="../upload.php"; 
echo "<script>alert('上传成功!'); window.location = \"".$page."\";</script>"; 
?>

有些问题需要说明下:
JPEG图像生成的图像的质量的是一个范围从0(最低质量,最小的文件大小)到100(最高质量,最大文件大小)。而ImagePNG生成图像的质量范围从0到9的,传入的这个范围以外的参数则该函数不会工作。
判断上传文件的类型,$type = $_FILES['work1']['type'];。
创建各种格式的图片可以使用这些函数:imagecreatefromjpeg()、imagecreatefrompng()、imagecreatefromgif()。
PHP 相关文章推荐
PHP中常用数组处理方法实例分析
Aug 30 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
Linux编译升级php的详细方法
Nov 04 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
ucenter通信原理分析
Jan 09 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
php中关于换行的实例写法
Sep 26 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
May 14 PHP
PHP安全防范技巧分享
Nov 03 #PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 #PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 #PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 #PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 #PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 #PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 #PHP
You might like
thinkPHP查询方式小结
2016/01/09 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
js数组Array sort方法使用深入分析
2013/02/21 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python异常处理try except过程解析
2020/02/03 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
委托证明的格式
2014/01/10 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
2014年电工工作总结
2014/11/20 职场文书
会计岗位工作总结
2015/08/12 职场文书
市级三好生竞选稿
2015/11/21 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书