PHP上传图片进行等比缩放可增加水印功能
php  /  管理员 发布于 7年前   214
/**
* 重新生成上传的文件名
* @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 "生成后的图片为:";
}else{
echo $_FILES['img']['error'];
return;
}
}else{
echo "图片格式不正确,请上传jpg,gif,png的格式!";
return;
}
}else{
echo <<
EOT;
}
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号