您的位置:首页 > 编程语言 > PHP开发

php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码

2017-06-29 19:20 1126 查看
代码如下:

<?php 

//上传文件类型列表 

$uptypes=array( 

'image/jpg', 

'image/jpeg', 

'image/png', 

'image/pjpeg', 

'image/gif', 

'image/bmp', 

'image/x-png' 

); 

$max_file_size = 200000; //上传文件大小限制, 单位BYTE 

$path_im = "prod_img/"; //生成大图保存文件夹路径 

$path_sim = "prod_simg/"; //缩略图保存文件夹路径 

$watermark = 1; //是否加水印(1为加水印,其他为不加水印); 

$watertype = 1; //水印类型(1为文字,2为图片) 

$waterstring = "http://www.jy17.com/"; //水印字符串 

$waterimg = "water.png"; //水印图片文件路径 

$waterclearly = 100; //水印透明度0-100,数字小透明高 

$imclearly = 100; //图片清晰度0-100,数字越大越清晰,文件尺寸越大 

$simclearly = 75; //缩略图清晰度0-100,数字越大越清晰,文件尺寸越大 

$smallmark = 1; //是否生成缩略图(1为加生成,其他为不); 

$dst_sw = 80; //定义缩略图宽度,高度我采用等比例缩放,所以只要比较宽度就可以了 

?> 

<form enctype="multipart/form-data" method="post" name="upform"> 

上传文件: 

<input name="upfile" type="file"> 

<input type="submit" value="上传"><br> 

允许上传的文件类型为:<?=implode(',',$uptypes)?> 

</form> 

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') 



if (!is_uploaded_file($_FILES["upfile"][tmp_name])) 

//是否存在文件 



echo "图片不存在!"; 

exit; 



$file = $_FILES["upfile"]; 

if($max_file_size < $file["size"]) 

//检查文件大小 

{ $max_file_size = $max_file_size/1000; 

echo "文件太大,超过 ".$max_file_size." KB!"; 

exit; 



if(!in_array($file["type"],$uptypes)) 

//检查文件类型 



echo "文件类型不符!".$file["type"]; 

exit; 



if(!file_exists($path_im)) 

//检查上传目录是否存在,不存在创建 



mkdir($path_im); 



if(!file_exists($path_sim)) 

//检查缩略图目录是否存在,不存在创建 



mkdir($path_sim); 



$filename = $file["tmp_name"]; 

$im_size = getimagesize($filename); 

$src_w = $im_size[0]; 

$src_h = $im_size[1]; 

$src_type = $im_size[2]; 

$pinfo = pathinfo($file["name"]); 

$filetype = $pinfo['extension']; 

$all_path = $path_im.time().".".$filetype; //路径+文件名,目前以上传时间命名 

if (file_exists($all_path)) 



echo "同名文件已经存在了"; 

exit; 



if(!move_uploaded_file ($filename,$all_path)) 



echo "移动文件出错"; 

exit; 



$pinfo = pathinfo($all_path); 

$fname = $pinfo[basename]; 

echo "<font color=red>已经成功上传</font><br>文件名: <font color=blue>".$all_path."</font><br>"; 

echo "宽度:".$src_w."px "; 

echo "长度:".$src_h."px "; 

echo "<br> 大小:".$file["size"]." bytes"; 

switch($src_type)//判断源图片文件类型 



case 1://gif 

$src_im = imagecreatefromgif($all_path);//从源图片文件取得图像 

break; 

case 2://jpg 

$src_im = imagecreatefromjpeg($all_path); 

break; 

case 3://png 

$src_im = imagecreatefrompng($all_path); 

break; 

//case 6: 

//$src_im=imagecreatefromwbmp($all_path); 

//break; 

default: 

die("不支持的文件类型"); 

exit; 



if($watermark == 1) 



//$iinfo = getimagesize($all_path,$iinfo); 

$dst_im = imagecreatetruecolor($src_w,$src_h); 

//根据原图尺寸创建一个相同大小的真彩色位图 

$white = imagecolorallocate($dst_im,255,255,255);//白 

//给新图填充背景色 

$black = imagecolorallocate($dst_im,0,0,0);//黑 

$red = imagecolorallocate($dst_im,255,0,0);//红 

$orange = imagecolorallocate($dst_im,255,85,0);//橙 

imagefill($dst_im,0,0,$white); 

imagecopymerge($dst_im,$src_im,0,0,0,0,$src_w,$src_h,100);//原图图像写入新建真彩位图中 

//imagefilledrectangle($dst_im,1,$src_h-15,80,$src_h,$white); 

switch($watertype) 



case 1: //加水印字符串 

imagestring($dst_im,5,5,$src_h-20,$waterstring,$orange);//文字水印,字体5号颜色橙色,位于背景图左下角 

break; 

case 2: //加水印图片 

$lim_size = getimagesize($waterimg); //取得水印图像尺寸,信息 

switch($lim_size[2]) //判断水印图片文件类型 



case 1://gif 

$src_lim = imagecreatefromgif($waterimg); //取得水印图像 

break; 

case 2://jpg 

$src_lim = imagecreatefromjpeg($waterimg); 

break; 

case 3://png 

$src_lim = imagecreatefrompng($waterimg); 

break; 

//case 6: 

//$src_im=imagecreatefromwbmp($waterimg); 

//break; 

default: 

die("不支持的文件类型"); 

exit; 



$src_lw = ($src_w-$lim_size[0])/2; //水印位于背景图正中央width定位 

$src_lh = ($src_h-$lim_size[1])/2; //height定位 

imagecopymerge($dst_im,$src_lim,$src_lw,$src_lh,0,0,$lim_size[0],$lim_size[1],$waterclearly);// 合并两个图像,设置水印透明度$waterclearly 

imagedestroy($src_lim); 

break; 



switch($src_type) 



case 1: 

imagegif($dst_im,$all_path,$imclearly);//生成gif文件,图片清晰度0-100 

break; 

case 2: 

imagejpeg($dst_im,$all_path,$imclearly);//生成jpg文件,图片清晰度0-100 

break; 

case 3: 

imagepng($dst_im,$all_path,$imclearly);//生成png文件,图片清晰度0-100 

break; 

//case 6: 

//imagewbmp($dst_im,$all_path); 

break; 



//释放缓存 

imagedestroy($dst_im); 



if($smallmark == 1) 



$sall_path = $path_sim.time().".".$filetype; 

if (file_exists($sall_path)) 



echo "同名文件已经存在了"; 

exit; 



if($src_w <= $dst_sw) // 原图尺寸 <= 缩略图尺寸 



$dst_sim = imagecreatetruecolor($src_w,$src_h); //新建缩略图真彩位图 

imagecopymerge($dst_sim,$src_im,0,0,0,0,$src_w,$src_h,100); //原图图像写入新建真彩位图中 



if($src_w > $dst_sw) // 原图尺寸 > 缩略图尺寸 



$dst_sh = $dst_sw/$src_w*$src_h; 

$dst_sim = imagecreatetruecolor($dst_sw,$dst_sh); //新建缩略图真彩位图(等比例缩小原图尺寸) 

imagecopyresampled($dst_sim,$src_im,0,0,0,0,$dst_sw,$dst_sh,$src_w,$src_h); //原图图像写入新建真彩位图中 



switch($src_type) 



case 1: 

imagegif($dst_sim,$sall_path,$simclearly);//生成gif文件,图片清晰度0-100 

break; 

case 2: 

imagejpeg($dst_sim,$sall_path,$simclearly);//生成jpg文件,图片清晰度0-100 

break; 

case 3: 

imagepng($dst_sim,$sall_path,$simclearly);//生成png文件,图片清晰度0-100 

break; 

//case 6: 

//imagewbmp($dst_sim,$sall_path); 

break; 



//释放缓存 

imagedestroy($dst_sim); 



//释放缓存 

imagedestroy($src_im); 



?>

php等比例生成缩略图函数2

复制代码代码如下:

function reSizeImg($imgSrc, $resize_width, $resize_height, $isCut=false) { 

//图片的类型 

$type = substr ( strrchr ( $imgSrc, "." ), 1 ); 

//初始化图象 

if ($type == "jpg") { 

$im = imagecreatefromjpeg ( $imgSrc ); 



if ($type == "gif") { 

$im = imagecreatefromgif ( $imgSrc ); 



if ($type == "png") { 

$im = imagecreatefrompng ( $imgSrc ); 



//目标图象地址 

$full_length = strlen ( $imgSrc ); 

$type_length = strlen ( $type ); 

$name_length = $full_length - $type_length; 

$name = substr ( $imgSrc, 0, $name_length - 1 ); 

$dstimg = $name . "_s." . $type; 

$width = imagesx ( $im ); 

$height = imagesy ( $im ); 

//生成图象 

//改变后的图象的比例 

$resize_ratio = ($resize_width) / ($resize_height); 

//实际图象的比例 

$ratio = ($width) / ($height); 

if (($isCut) == 1) //裁图 



if ($ratio >= $resize_ratio) //高度优先 



$newimg = imagecreatetruecolor ( $resize_width, $resize_height ); 

imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, (($height) * $resize_ratio), $height ); 

ImageJpeg ( $newimg, $dstimg ); 



if ($ratio < $resize_ratio) //宽度优先 



$newimg = imagecreatetruecolor ( $resize_width, $resize_height ); 

imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, $width, (($width) / $resize_ratio) ); 

ImageJpeg ( $newimg, $dstimg ); 



} else //不裁图 



if ($ratio >= $resize_ratio) { 

$newimg = imagecreatetruecolor ( $resize_width, ($resize_width) / $ratio ); 

imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, ($resize_width) / $ratio, $width, $height ); 

ImageJpeg ( $newimg, $dstimg ); 



if ($ratio < $resize_ratio) { 

$newimg = imagecreatetruecolor ( ($resize_height) * $ratio, $resize_height ); 

imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, ($resize_height) * $ratio, $resize_height, $width, $height ); 

ImageJpeg ( $newimg, $dstimg ); 





ImageDestroy ( $im ); 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息