上传图片加水印,缩略图代码

<?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 = "[url=http://www.jy17.com/]http://www.jy17.com/[/url]"; //水印字符串
$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>
允许上传的文件类型为:<?php 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);
}
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值