PHP上传图片进行等比缩放可增加水印功能


Posted in PHP onJanuary 13, 2014

啥也不说,直接上代码,大家可以自行添加增加水印功能:

<?php 
/** 
* 
* @author zhao jinhan 
* @date 2014年1月13日11:54:30 
* @email xb_zjh@126.com 
* 
*/ 
header('Content-type:text/html; charset=utf-8'); 
//定义缩略图的宽高 
define('THUMB_WIDTH',300); 
define('THUMB_HEIGHT',300); /** 
* 重新生成上传的文件名 
* @return string 
* @author zhao jinhan 
* 
*/ 
function _file_type($filetype = null){ 
switch($filetype) 
{ 
case "image/jpeg": 
$fileextname = "jpg"; 
break; 
case "image/gif": 
$fileextname = "gif"; 
break; 
case "image/png": 
$fileextname = "png"; 
break; 
default: 
$fileextname = false; 
break; 
} 
return $fileextname?date('YmdHis',time()).'.'.$fileextname:false; 
} 
/** 
* 
* @param string $filename 
* @param string $width 
* @param string $height 
* @param string $quality 
* @param string $savepath 
* @return boolean 
*/ 
function _make_thumb($filename='', $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath='./upload'){ 
if(file_exists($filename)){ 
//上传图片的尺寸 
$imagesize=getimagesize($filename); 
$imagewidth=$imagesize[0]; 
$imageheight=$imagesize[1]; 
$mime = $imagesize['mime']; 
//宽高比例 
$ratio = $imagewidth/$imageheight; 
//新建一个背景图片 
$bgimg = imagecreatetruecolor($width, $height); 
$white = imagecolorallocate($bgimg, 255, 255, 255); 
//填充背景色为白色 
imagefill($bgimg,0,0,$white); 
if($mime == 'image/gif'){ 
$im = @imagecreatefromgif($filename); /* Attempt to open */ 
$outfun = 'imagegif'; 
}elseif($mime == 'image/png'){ 
$im = @imagecreatefrompng($filename); /* Attempt to open */ 
$outfun = 'imagepng'; 
}else{ 
$im = @imagecreatefromjpeg($filename); /* Attempt to open */ 
$outfun = 'imagejpeg'; 
} 
if($ratio > 1){ 
//宽度较大 
if($imagewidth > $width){ 
//缩放图片到背景图片上 
$new_width = $width; 
$new_height = ($width*$imageheight)/$imagewidth; 
$bg_y = ceil(abs(($height-$new_height)/2)); 
imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight); 
}else{ 
//复制图片到背景图片上 
$copy = true; 
} 
}else{ 
//高度较大 
if($imageheight > $height){ 
//缩放图片 
$new_height = $height; 
$new_width = ($height*$imagewidth)/$imageheight; 
$bg_x = ceil(($width-$new_width)/2); 
imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight); 
}else{ 
//复制图片到背景图片上 
$copy = true; 
} 
} 
if($copy){ 
//复制图片到背景图片上 
$bg_x = ceil(($width-$imagewidth)/2); 
$bg_y = ceil(($height-$imageheight)/2); 
imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight); 
} 
$ext = _file_type($mime); 
$outfun($bgimg, $savepath.'/'.$ext); 
imagedestroy($bgimg); 
return $savepath.'/'.$ext; 
}else{ 
return false; 
} 
} 
if($_POST){ 
$size = $_POST['size']?strtoupper(trim($_POST['size'])):'2M'; 
$imgsize = $_FILES['img']['size']?$_FILES['img']['size']/(1024*1024):0; 
$imgwidth = $imgheight = $_POST['width-height']?intval($_POST['width-height']):300; 
//自定定义文件上传大小 
ini_set('upload_max_filesize',$size); 
$mathsize = str_replace('M','',$size); 
if($imgsize>$mathsize){ 
echo "图片大小不得超过{$size}!"; 
return; 
} 
if($file_name = _file_type($_FILES['img']['type'])){ 
if($_FILES['img']['error'] == UPLOAD_ERR_OK){ 
$savepath = 'upload/'; 
if(!is_dir($savepath)){ 
mkdir($savepath,0644); 
} 
//生成缩略图 
$thumb_file = _make_thumb($_FILES['img']['tmp_name'], $imgwidth, $imgheight, $savepath); 
//move_uploaded_file($_FILES['img']['tmp_name'],$savepath.$file_name); 
echo "生成后的图片为:<img src='".$thumb_file."' />"; 
}else{ 
echo $_FILES['img']['error']; 
return; 
} 
}else{ 
echo "图片格式不正确,请上传jpg,gif,png的格式!"; 
return; 
} 

}else{ 
echo <<<EOT 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>缩放图片保存成正方形</title> 
</head> 
<body> 
<form action="" method="POST" enctype="multipart/form-data"> 
<div> 
<label>上传一张图片:</label> 
<input type="file" name="img" /> 
</div> 
<div> 
<label>生成缩略图的宽高(单位px):</label> 
<input type="text" name="width-height" value="300" /> 
</div> 
<div> 
<label>文件大小上限:</label> 
<input type="text" name="size" value="2M" /> 
</div> 
<div><input type="submit" name="submit" value="提交" /></div> 
</form> 
</body> 
</html> 
EOT; 
}
PHP 相关文章推荐
ASP知识讲座四
Oct 09 PHP
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
php网站地图生成类示例
Jan 13 #PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 #PHP
php中文验证码实现示例分享
Jan 12 #PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 #PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 #PHP
浅析php数据类型转换
Jan 09 #PHP
js和php邮箱地址验证的实现方法
Jan 09 #PHP
You might like
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
document.createElement()用法
2013/03/13 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
python实现划词翻译
2020/04/23 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python异步Web框架sanic的实现
2020/04/27 Python
python3实现飞机大战
2020/11/29 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
高校教师个人工作总结2014
2014/12/17 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
纪录片信仰观后感
2015/06/08 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL
关于Vue中的options选项
2022/03/22 Vue.js