php 图片上传的公共方法(按图片宽高缩放或原图)
写的用于图片上传的公共方法
类调用方法:
$upload_name='pic';
$type = 'logo_val';
$file_name = 'logo_' . $user_id .create_strcode(5). '.jpg'; //保存文件名
$savepath = "/uploads/user_logo/"; //上传文件的存放路径
$img_width=$img_height='100';
$result=upload_images_core($_FILES,$upload_name,$file_name,$savepath,$img_width,$img_height);
/*
* 图片上传核心处理方法(按图片宽高缩放)
* @param $file_arr array 图片上传$_FILES获取的数组
* @param $upload_name 页面file控件name值
* @param $img_name 图片名称(含后缀)
* @param savepath 新图片保存目录
* @param maxwidth 新图片最大宽度
* @param maxwidth 新图片最大高度
* @author xufeng 837274769@qq.com
* */
function upload_images_core($file_arr,$upload_name,$file_name,$savepath,$maxwidth=100,$maxheight=100){
if(empty($file_arr) || empty($upload_name)){//当接收文件为空或控件名称为空时,直接返回错误
return array('state'=>RESULT_FAILURE,'msg'=>'不知名错误');
}else{
$file_arr=$file_arr[$upload_name];
}
$type = strtolower(substr($file_arr['name'],strrpos($file_arr['name'],'.')+1)); //得到文件类型,并且都转化成小写
$allow_type = array('jpg','jpeg','gif','png'); //允许上传的类型
$maxsize = 2048000; //最大限制 2M
$base_path = APPPATH . '../htdocs';
$img_path=$base_path.$savepath.$file_name;
//检测是否是正常HTTP POST上传的
if(!is_uploaded_file($file_arr['tmp_name'])){
return array('state'=>RESULT_FAILURE,'msg'=>'非法来源文件');
}
/** 检查目录是否可写 */
if (!@is_writable($base_path.$savepath)) {
return array('state'=>RESULT_FAILURE,'msg'=>'目录不可写');
}
/*检查文件是否超过限制*/
if ($maxsize!= 0) {
if ($file_arr['size'] > $maxsize) {
return array('state'=>RESULT_FAILURE,'msg'=>'文件太大');
}
}
if(!in_array($type, $allow_type)){
return array('state'=>RESULT_FAILURE,'msg'=>'不允许该格式文件');
}
if(move_uploaded_file($file_arr['tmp_name'],$img_path)){
switch($type){
case 'jpg': $im=imagecreatefromjpeg($img_path);
break;
case 'jpeg': $im=imagecreatefromjpeg($img_path);
break;
case 'gif': $im=imagecreatefromgif($img_path);
break;
case 'png': $im=imagecreatefrompng($img_path);
break;
default: return array('state'=>RESULT_FAILURE,'msg'=>'不允许该格式文件');
}
$pic_width = imagesx($im);
$pic_height = imagesy($im);
if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))
{
if($maxwidth && $pic_width>$maxwidth) //原图宽度大于最大宽度
{
$widthratio = $maxwidth/$pic_width;
$resizewidth_tag = true;
} if($maxheight && $pic_height>$maxheight) //原图高度度大于最大高度
{
$heightratio = $maxheight/$pic_height;
$resizeheight_tag = true;
} if($resizewidth_tag && $resizeheight_tag) //如果新图片的宽度和高度都比原图小
{
if($widthratio<$heightratio) //那个比较小就说明它的长度要长,就取哪条,以长边为准缩放保证图片不被压缩
$ratio = $widthratio;
else
$ratio = $heightratio;
} if($resizewidth_tag && !$resizeheight_tag)
$ratio = $widthratio;
if($resizeheight_tag && !$resizewidth_tag)
$ratio = $heightratio; $newwidth = $pic_width * $ratio; //原图的宽度*要缩放的比例
$newheight = $pic_height * $ratio; //原图高度*要缩放的比例 if(function_exists("imagecopyresampled"))
{
$newim = imagecreatetruecolor($newwidth,$newheight); //生成一张要生成的黑色背景图 ,比例为计算出来的新图片比例
imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); //复制按比例缩放的原图到 ,新的黑色背景中。
}
else
{
$newim = imagecreate($newwidth,$newheight);
imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
}
@imagejpeg($newim,$img_path);
@imagedestroy($newim);
}
else
{
@imagejpeg($im,$img_path);
}
return array('state'=>RESULT_SUCCESS,'msg'=>$savepath.$file_name);
}else{
return array('state'=>RESULT_FAILURE,'msg'=>'不知名错误');
}
}
php 图片上传的公共方法(按图片宽高缩放或原图)的更多相关文章
- js判断图片上传时的文件大小,和宽高尺寸
今天在做图片上传的小功能,使用了一个kissy上传组件.很好奇它是如何在图片上传前,检测到图片的大小和尺寸的?我们来写个小实例实现一下吧 如何读取图片的size 首先,原生input file控件有个 ...
- input type=file实现图片上传,预览以及图片删除
背景 前两天在做一个PC网站的意见反馈,其中涉及到了图片上传功能,要求可以上传多张图片,并且支持图片上传预览及图片删除, 图片上传这一块以前没怎么搞过,而且一般也很少会碰到这样的需求,所以在做这个功能 ...
- 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片
在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文 ...
- jsp+springmvc实现文件上传、图片上传和及时预览图片
1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...
- php图片上传检测是否为真实图片格式
PHP 图片上传,如果不做任何判断的话,随便一个文件如 rar,zip,php,java等文件改个文件名,改个后缀就能以图片形式上传的服务器,往往会造成极大的危害! 工具/原料 PHP apach ...
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
目录 1.案例 1.1图片上传 1.2进行图片木马检测 1.3缩略图生成 1.4控制器中调用缩略图生成方法 1.案例 前言:在thinkphp框架的Thinkphp/Library/Thin ...
- 小程序实现图片上传,预览以及图片base64位处理
最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...
- layui图片上传之后后台如何修改图片的后缀名以及返回数据给前台
const pathLib = require('path');//引入node.js下的一个path模块的方法,主要处理文件的名字等工作,具体可看文档 const fs = require(''fs ...
- asp.net多图片上传同时保存对每张图片的描述
前台aspx //图片预览和描述 function previewImage(file) { var div = document.getElementById('preview'); div.inn ...
随机推荐
- 集合 LinkedList、ArrayList、Set、Treeset
LinkedList中特有的方法: 1:方法介绍 addFirst(E e) addLast(E e) getFirst() getLast() removeFirst() removeLast() ...
- WinForm任务栏最小化
在C#编写的WinForm里,在FormBorderStyle设为None的时候,任务栏点击程序图标,不会自动最小化.在主窗口WinForm.cs里加入如下代码后,即可恢复该功能. protected ...
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- .Net中Remoting通信机制简单实例
.Net中Remoting通信机制 前言: 本程序例子实现一个简单的Remoting通信案例 本程序采用语言:c# 编译工具:vs2013工程文件 编译环境:.net 4.0 程序模块: Test测试 ...
- [Git] 还原Git上commit,但是没有push代码
直接在Idea上操作2步解决: 1. 找到: 2. 在To Commit里面填写:HEAD^,表示将commit的信息还原为上一次的,需要多次直接reset多次即可: 使用命令行:原理一样 以下内容转 ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 2012-04-25 16:29:04| 分类: 学习 |字号 订阅 在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE ...
- Angular表单验证
novalidate 去掉html5自带的验证 ng-minlength 规定输入文本的最小长度 ng-maxlength 规定输入文本的最大长度 ng-submit 接收一个方法名 ...
- Centos:Another app is currently holding the yum lock; waiting for it to exit...
Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是:PackageKit 内存: 27 ...
- A*算法的原理 <转>
第一部分:A*算法简介 写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里 抛砖引玉,希望大家都来热心的参与. 还是说正题,我先拿A*算法开刀, ...