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 相关文章推荐
对Session和Cookie的区分与解释
Mar 16 PHP
PHP 上传文件的方法(类)
Jul 30 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python 爬取微信文章
2016/01/30 Python
bpython 功能强大的Python shell
2016/02/16 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
深入了解python列表(LIST)
2020/06/08 Python
学python最电脑配置有要求么
2020/07/05 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Pycharm github配置实现过程图解
2020/10/13 Python
社会实践的活动方案
2014/08/22 职场文书
邓小平理论心得体会
2014/09/09 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python