您的位置:首页 > 网络编程 > PHP >

Php Gd2 上传图片/文字水印/图片水印/等比例缩略图/源代码

日期:2007-12-04 01:03:57 点击: 来自: 作者:ee!!
 <?php
/******************************************************************************
使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;php4.6.0以上版本使用默认路径
******************************************************************************/
//上传文件类型列表
$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);
}
?>
More..素材图片 Picture Navigation
  • 《超宽屏壁纸》带你体验大自然的魅力
  • 18张最美丽的北京风光 1600X1200 像素
  • 2ADVANCED 2006 壁纸系列
  • 060629ICON014_吉祥如意图标28+个+2张大图
PHP热门 Class Hot
PHP推荐 Class Commend
版权所有:中国网站资源 2005- 未经授权禁止复制或建立镜像 This Site Tech:XHTML+DIV+CSS+Javascript
CopyRight ® 2005- www.Chinaddv.com online services. all rights reserved. ICP06016627
Optimized to 1024x768 to Firefox,Netscape,Opera,MS-IE6+.