php批量下载图片并加水印

//图片批量下载
 function downloads(){

  $id = I("test");
  //根据id获取数据库中的信息

  $idstr = implode(",",$id);
  $map['id']  = array('in',$idstr);
  $file = M("Pic")->field("id,path")->where($map)->select();

 

  # 把图片的url存放在新的一位数组中
  $times = date('YmdHis',time());
  !is_dir('Uploads/images/'.$times) ? mkdir('Uploads/images/'.$times):null;//创建目录


  for($j = 0;$j < count($file);$j++){
   //把下载的图片存到本地
   $img = explode('/', $file[$j]["path"]);
   $images =  $img[count($img)-1];
   $filename = 'Uploads/images/'.$times.'/'.$images;
   file_put_contents($filename, file_get_contents($file[$j]["path"]));
   

   //获取加水印的内容

   $waterText = "水印图片";

   //加水印

 

   $this->imageWaterMark($filename,$waterPos,$waterImage,$waterText);
  }
  

//下载压缩图片文件

  require_once "Public/zip.php";
  $zip = new PHPZip();
  $zip->downloadZip('Uploads/images/'.$times, $times.".zip");

 }
 
 
 //水印方法
 imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$textFont=10,$textColor="#FF0000")
 {
  header("Content-Type:text/html;charset=utf-8");
  
  $isWaterImage = FALSE;
  $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";
  //读取水印文件
  if(!empty($waterImage) && file_exists($waterImage))
  {
   $isWaterImage = TRUE;
   $water_info = getimagesize($waterImage);
   $water_w = $water_info[0];//取得水印图片的宽
   $water_h = $water_info[1];//取得水印图片的高
   switch($water_info[2])//取得水印图片的格式
   {
    case 1:$water_im = imagecreatefromgif($waterImage);break;
    case 2:$water_im = imagecreatefromjpeg($waterImage);break;
    case 3:$water_im = imagecreatefrompng($waterImage);break;
    default:die($formatMsg);
   }
  }
  //读取背景图片
  if(!empty($groundImage) && file_exists($groundImage))
  {
   $ground_info = getimagesize($groundImage);
   $ground_w = $ground_info[0];//取得背景图片的宽
   $ground_h = $ground_info[1];//取得背景图片的高
   switch($ground_info[2])//取得背景图片的格式
   {
    case 1:$ground_im = imagecreatefromgif($groundImage);break;
    case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
    case 3:$ground_im = imagecreatefrompng($groundImage);break;
    default:die($formatMsg);
   }
  }
  else
  {
   die("需要加水印的图片不存在!");
  }
  
  //在底部画黑色的背景
  imagefilledrectangle ( $ground_im, 0, $ground_h-35,$ground_w,$ground_h, imagecolorallocate($ground_im,0,0,0) );
  
  //水印位置
  if($isWaterImage)//图片水印
  {
   $w = $water_w;
   $h = $water_h;
   $label = "图片的";
  }
  else//文字水印
  
   $temp = imagettfbbox(ceil($textFont*5),0,"cour.ttf",$waterText);//取得使用 TrueType 字体的文本的范围   $w = $temp[2] - $temp[6];
   $h = $temp[3] - $temp[7];
   unset($temp);
   $label = "文字区域";
  }
  if( ($ground_w<$w) || ($ground_h<$h) )//($ground_w<$w)
  {
   echo "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!";
   return;
  }
  switch($waterPos)
  {
   case 0://随机
    $posX = rand(0,($ground_w - $w));
    $posY = rand(0,($ground_h - $h));
    break;
   case 1://1为顶端居左
    $posX = 0;
    $posY = 0;
    break;
   case 2://2为顶端居中
    $posX = ($ground_w - $w) / 2;
    $posY = 0;
    break;
   case 3://3为顶端居右
    $posX = $ground_w - $w;
    $posY = 0;
    break;
   case 4://4为中部居左
    $posX = 0;
    $posY = ($ground_h - $h) / 2;
    break;
   case 5://5为中部居中
    $posX = ($ground_w - $w) / 2;
    $posY = ($ground_h - $h) / 2;
    break;
   case 6://6为中部居右
    $posX = $ground_w - $w;
    $posY = ($ground_h - $h) / 2;
    break;
   case 7://7为底端居左
    $posX = 0;
    $posY = $ground_h - $h;
    break;
   case 8://8为底端居中
    $posX = ($ground_w - $w) / 2;
    $posY = $ground_h - $h;
    break;
   case 9://9为底端居右
    $posX = $ground_w - $w - 10;   // -10 是距离右侧10px 可以自己调节
    $posY = $ground_h - $h - 10;   // -10 是距离底部10px 可以自己调节
    break;
   default://随机
    $posX = rand(0,($ground_w - $w));
    $posY = rand(0,($ground_h - $h));
    break;
  }
  //设定图像的混色模式
  imagealphablending($ground_im, true);
  if($isWaterImage)//图片水印
  {
   imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件
  }
  else//文字水印
  {
   if( !empty($textColor) && (strlen($textColor)==7) )
   {
    $R = hexdec(substr($textColor,1,2));
    $G = hexdec(substr($textColor,1,2));
    $B = hexdec(substr($textColor,1,2));
   }
   else
   {
    die("水印文字颜色格式不正确!");
   }
   

  //在背景图片上写文字
   imagettftext($ground_im, $textFont, 0, $posX, $ground_h-20, imagecolorallocate($ground_im, $R, $G, $B), "cour.ttf",$waterText);
   
  }
  
  //生成水印后的图片
  @unlink($groundImage);
  switch($ground_info[2])//取得背景图片的格式
  {
   case 1:imagegif($ground_im,$groundImage);break;
   case 2:imagejpeg($ground_im,$groundImage);break;
   case 3:imagepng($ground_im,$groundImage);break;
   default:die($formatMsg); 
  
  //释放内存 
  if(isset($water_info)) unset($water_info); 
  if(isset($water_im)) imagedestroy($water_im); 
  unset($ground_info); 
  imagedestroy($ground_im); 
 }
 

//中文乱码(或者写入的字体文件类型有误,不支持中文)
   //$waterText = iconv("gb2312//IGNORE","utf-8",$waterText);
   //$waterText = mb_convert_encoding($waterText,'utf-8','gb2312');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值