首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

上传图片添加水印?该怎么解决

2012-04-13 
上传图片添加水印???上传图片添加水印???搞了个上传图片的函数(经过测试可以上传图片,这个没有问题)现在想

上传图片添加水印???
上传图片添加水印???


搞了个上传图片的函数(经过测试可以上传图片,这个没有问题)

现在想上传图片时添加水印图片(一个小gif)

上传图片时,网页提示函数imagecopymerge()报错,不知道哪里出了问题,大家帮我看看


上传图片函数代码:

PHP code
/*$files为上传的图片文件$folder为上传图片的文件夹*/function uploads($files,$folder){    //取得图片的后缀名    $knamearray=explode(".",$_FILES["upfile"]["name"]);    $kname=$knamearray[count($knamearray)-1];    //设置图片文件名为系统时间    $filename=date('YmdHis');    $filenames=$filename.$code.".".$kname;    $upfile=$folder."/".$filenames;    //上传图片    move_uploaded_file($files,$upfile);    //添加水印图片开始了……    $im=imagecreatefromgif("wimages/logo.gif"); //logo.gif图片的尺寸为120*45    imagecopymerge($upfile,$im,0,0,0,0,120,45,80); //现在提示这句有问题。。。    return $filenames;//回传图片文件名}


[解决办法]
$im=imagecreatefromgif("wimages/logo.gif"); //logo.gif图片的尺寸为120*45
最好把路径换成相对的路径;
imagecopymerge($upfile,$im,0,0,0,0,120,45,80); //现在提示这句有问题。。。
楼主能不能帮我解释一下imagecopymerge的各个参数的意义啊
[解决办法]
探讨
$im=imagecreatefromgif("wimages/logo.gif"); //logo.gif图片的尺寸为120*45
最好把路径换成相对的路径;
imagecopymerge($upfile,$im,0,0,0,0,120,45,80); //现在提示这句有问题。。。
楼主能不能帮我解释一下imagecopymerge的各个参数的意义啊

[解决办法]
可以这样写:

 $descrition ="/upload/imag_1123323.jpg";//这个是要加水印图片的路径和文件名;

 $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);//创建新建一个真彩色图像
//$image_size为要加水印的图片大小信息的数组;

 $simage=imagecreatefromgif($destination); //把要加水印的图片已gif格式读入;

 imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
//把要加水印的拷贝到创建的真彩色图像上;
 imagedestroy($simage); //销毁
 $simage1 = imagecreatefromgif("wimages/logo.gif")// 这个路径估计要弄对
//把水印图片读入
 imagecopy($nimage,$simage1,0,0,0,0,85,15); //把水印也拷贝到上面;
 

 imagejpeg($nimage,$descrtion); //把三个图片叠加得到的新图片保存为原来没有水印的图片

 imagedestroy($nimage); //销毁
 imagedestroy($simage);
[解决办法]
最近我用网上的来修改,弄了一个,做成类,,
用这个类,可以做出多张图片上传。。。。
PHP code
class upimg{  //该类用来实现上传$uptypes数组内类型的图片,可以通过setWaterMark()启用设置水印 

/**
  *
  * 则在图片上加水印;
  * 外部通过访问$msg ,$img_width, $img_height ,$save_dir,$img_size变量
  * 获取图片在上传过程中出现的错误,和图片上传后保存的路径,图片大小等信息;
  */
private $uptypes = array('image/gif','image/jpg','image/jpeg','image/png','image/pjpeg');//'image/bmp','image/x-png');
private $max_file_size = 200000;
private $dir_folder = "../imageupload/";
private $water_mark = 1;
private $water_type = 1;
private $water_str = "http://www.516ya.cn";
private $water_img = "xplore.gif";
private $create_water= false;
private $overwrite = false;

public $msg="";
public $img_width=0;
public $img_height=0;
public $save_dir="";
public $img_size=0;
public $sucess =false;

function setWaterMark(){
$this->create_water = true;
}

function startUpload($files){


  if(!is_uploaded_file($files['tmp_name']))
{
    $this->msg.="图片不存在!--";


  return $this->sucess=false;
  }

  if($files['error']!=UPLOAD_ERR_OK){
    $this->msg.="图片上传过程中出现错误";
    return $this->sucess=false;
  }

  $file = $files;

  if($this->max_file_size <$file['size'])

  {
  $this->msg.="你选择的文件大小超过限制--";

  return $this->sucess=false;

  }

  if(!file_exists($this->dir_folder))

  {
  mkdir($this->dir_folder);
  }

  $file_name = $file['tmp_name'];
  $image_size = getimagesize($file_name);
  $path_info = pathinfo($file['name']);
  $ftype = $path_info['extension'];
  $destination = $this->dir_folder."img_".(double)microtime() * 1000003 * time().".".$ftype;

  if(!in_array($file['type'],$this->uptypes)){

  $this->msg.="文件类型不正确--";

  return $this->sucess=false;
  }

  if(file_exists($destination)&& $this->overwrite!=true)

  {
  $this->msg.= "有一个同名文件存在--";

  return $this->sucess=false;

  }
  if(!move_uploaded_file($file_name,$destination))

  {
  $this->msg.= "图片从零时文件夹保存到指定文件夹时出错--";

  return $this->sucess=false;

  }

  $pinfo = pathinfo($destination);
  $fname = $pinfo[basename];

  $this->save_dir.= $this->dir_folder.$fname."|";
  $this->img_width =$image_size[0];
  $this->img_height =$image_size[1];
  $this->img_size= $file['size']."字节";
  $this->msg.="图片上传成功--";
  $this->sucess = true;

if($this->create_water ==true)
{
if($this->water_mark==1)
  {
    $iinfo=getimagesize($destination);
    $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
    $white=imagecolorallocate($nimage,255,255,255);
    $black=imagecolorallocate($nimage,0,0,0);
    $red=imagecolorallocate($nimage,255,0,0);
    imagefill($nimage,0,0,$white);

    switch($iinfo[2])//根据获取图片的类型,判断采用何种操作
    {
      case 1:
      $simage=imagecreatefromgif($destination);
      break;

      case 2:
      $simage=imagecreatefromjpeg($destination);
      break;

      case 3:
      $simage=imagecreatefrompng($destination);
      break;

      case 6:
      $simage=imagecreatefromwbmp($destination);
      break;

      default:
      die("不支持的文件类型");
      exit;
    }

    imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
    imagefilledrectangle($nimage,$image_size[0]-124,$image_size[1]-17,$image_size[0]-2,$image_size[1]-2,$white);

    switch($this->water_type)
    {
      case 1:  //加水印字符串
      imagestring($nimage,2,$image_size[0]-121,$image_size[1]-17,$this->water_str,$black);
      break;

      case 2:  //加水印图片
      $simage1=imagecreatefromgif("xplore.gif");


      imagecopy($nimage,$simage1,0,0,0,0,85,15);
      imagedestroy($simage1);
      break;
    }

    switch($iinfo[2])
    {
      case 1:
    imagejpeg($nimage,$destination);
      break;

      case 2:
      imagejpeg($nimage,$destination);
      break;

      case 3:
      imagepng($nimage,$destination);
      break;

      case 6:
      imagewbmp($nimage,$destination);
      break;

      default:
      die("不支持的文件类型");
      exit;
    }

    //覆盖原上传文件
    imagedestroy($nimage);
    imagedestroy($simage);
  }
  $this->success =true;
  }
}
}


[解决办法]
问题在这里
$knamearray=explode(".",$_FILES["upfile"]["name"]);

你这是在一个函数里面,$_FILES["upfile"]是空的.

如果要使用应该先在函数的开始处加入
global $_FILES;

如下:

/*
$files为上传的图片文件
$folder为上传图片的文件夹
*/

function uploads($files,$folder)
{

global $_FILES;

//取得图片的后缀名
$knamearray=explode(".",$_FILES["upfile"]["name"]);
$kname=$knamearray[count($knamearray)-1];

//设置图片文件名为系统时间
$filename=date('YmdHis');
$filenames=$filename.$code.".".$kname;
$upfile=$folder."/".$filenames;

//上传图片
move_uploaded_file($files,$upfile);

//添加水印图片开始了……
$im=imagecreatefromgif("wimages/logo.gif"); //logo.gif图片的尺寸为120*45
imagecopymerge($upfile,$im,0,0,0,0,120,45,80); //现在提示这句有问题。。。

return $filenames;//回传图片文件名
}

[解决办法]
http://topic.csdn.net/u/20090117/09/f5f5a16c-c4e0-480d-9d16-7f8cae8ff641.html
这里有个加水印可以的
[解决办法]
织梦的后台有个加水印的功能,如果是在搞不定或者有兴趣可以去研究一下。

去官方下载源码下来研究研究。。
[解决办法]
在你源程序上改的,不知道能否解决问题
PHP code
function uploads($files,$folder){    //取得图片的后缀名    $knamearray=explode(".",$_FILES["upfile"]["name"]);    $kname=$knamearray[count($knamearray)-1];    //设置图片文件名为系统时间    $filename=date('YmdHis');    $filenames=$filename.$code.".".$kname;    $upfile=$folder."/".$filenames;    //上传图片    move_uploaded_file($files,$upfile);        //增加部分 start    $type = image_type_to_extension($upfile);    if($type == "jpg") $type = "jpeg";    $image_func = "imagecreatefrom".$type;    $image = $image_func($upfile);   //增加部分 end       //添加水印图片开始了……    $im=imagecreatefromgif("wimages/logo.gif"); //logo.gif图片的尺寸为120*45    imagecopymerge($image,$im,0,0,0,0,120,45,80); //现在提示这句有问题。。。    //增加部分 start    imagedestroy($im);        header("Content-Type: image/".$type);    $image_new = "image".$type;    $image_new($image, $upfile);    imagedestroy($image);    //增加部分 end        return $filenames;//回传图片文件名}
[解决办法]
不好意思上面写错了:
上面的$type = image_type_to_extension($upfile);这一行应改为:
$size = getimagesize($upfile);
$type = substr(image_type_to_extension($size[2]),1);


热点排行