相思资源网 Design By www.200059.com

给图片添加水印,其实就是把原来的图片和水印添加在一起,下面小编把最近整理的资料分享给大家。

php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法。

  操作图片主要历经四个步骤:

        第一步:打开图片

        第二步:操作图片

        第三步:输出图片

        第四步:销毁图片

  1,3,4三个步骤每次都要写,每次又都差不多。真正需要变通的只有操作图片的这一步骤了。操作图片又往往通过1或多个主要的GD函数来完成。

  本文封装类里面的四种方法,文字水印(imagettftext()),图片水印(imagecopymerge()),图片压缩,图片剪切(imagecopyresampled()),其余的常用GD函数便不赘述。

直接上代码:

<"imagecreatefrom{$this->type}";
  $this->image=$fun($src);
 }
 /**
  * 文字水印
  * @param [type] $font  字体
  * @param [type] $content 内容
  * @param [type] $size  文字大小
  * @param [type] $col  文字颜色(四元数组)
  * @param array $location 位置 
  * @param integer $angle 倾斜角度
  * @return [type]   
  */
 public function fontMark($font,$content,$size,$col,$location,$angle=0){
  $col=imagecolorallocatealpha($this->image, $col['0'], $col['1'], $col['2'],$col['3']);
  imagettftext($this->image, $size, $angle, $location['0'], $location['1'], $col,$font,$content);
 }
 /**
  * 图片水印
  * @param [type] $imageMark 水印图片地址
  * @param [type] $dst  水印图片在原图片中的位置
  * @param [type] $pct  透明度
  * @return [type]   
  */
 public function imageMark($imageMark,$dst,$pct){
  $info2=getimagesize($imageMark);
  $type=image_type_to_extension($info2['2'],false);
  $func2="imagecreatefrom".$type;
  $water=$func2($imageMark);
  imagecopymerge($this->image, $water, $dst[0], $dst[1], 0, 0, $info2['0'], $info2['1'], $pct);
  imagedestroy($water);
 }
 /**
  * 压缩图片
  * @param [type] $thumbSize 压缩图片大小
  * @return [type]   [description]
  */
 public function thumb($thumbSize){
  $imageThumb=imagecreatetruecolor($thumbSize[0], $thumbSize[1]);
  imagecopyresampled($imageThumb, $this->image, 0, 0, 0, 0, $thumbSize[0], $thumbSize[1], $this->info['0'], $this->info['1']);
  imagedestroy($this->image);
  $this->image=$imageThumb;
 }
 /**
 * 裁剪图片
  * @param [type] $cutSize 裁剪大小
  * @param [type] $location 裁剪位置
  * @return [type]   [description]
  */
  public function cut($cutSize,$location){
   $imageCut=imagecreatetruecolor($cutSize[0],$cutSize[1]);
   imagecopyresampled($imageCut, $this->image, 0, 0, $location[0], $location[1],$cutSize[0],$cutSize[1],$cutSize[0],$cutSize[1]);
   imagedestroy($this->image);
   $this->image=$imageCut;
  }
 /**
  * 展现图片
  * @return [type] [description]
  */
 public function show(){
  header("content-type:".$this->info['mime']);
  $funn="image".$this->type;
  $funn($this->image);
 }
 /**
  * 保存图片
 * @param [type] $newname 新图片名
 * @return [type]   [description]
 */
  public function save($newname){
   header("content-type:".$this->info['mime']);
   $funn="image".$this->type;
   $funn($this->image,$newname.'.'.$this->type);
  }
  public function __destruct(){
   imagedestroy($this->image);
  }
 }
 "color: #ff0000">给图片添加水印代码:

先看文件check_image_addwatermark.php代码

<"arial";
//upload_image.php页面传递过来的参数,如果是上传图片
if($_POST['submit'] == 'Upload')
{
 if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
 {
  switch($_FILES['uploadfile']['error'])
  {
   case UPLOAD_ERR_INI_SIZE:
    die('The uploaded file exceeds the upload_max_filesize directive');
   break;
   case UPLOAD_ERR_FORM_SIZE:
    die('The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form');
   break;
   case UPLOAD_ERR_PARTIAL:
    die('The uploaded file was only partially uploaded');
   break;
   case UPLOAD_ERR_NO_FILE:
    die('No file was uploaded');
   break;
   case UPLOAD_ERR_NO_TMP_DIR:
    die('The server is missing a temporary folder');
   break; 
   case UPLOAD_ERR_CANT_WRITE:
    die('The server fail to write the uploaded file to the disk');
   break;  
   case UPLOAD_ERR_EXTENSION:
    die('The upload stopped by extension');
   break;    
  }
 }
 $image_caption = $_POST['caption'];
 $image_username = $_POST['username'];
 $image_date = date('Y-m-d');
 list($width,$height,$type,$attr) = getimagesize($_FILES['uploadfile']['tmp_name']);
 $error = 'The file you upload is not a supported filetype';
 switch($type)
 {
  case IMAGETYPE_GIF:
   $image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or die($error);
  break;
  case IMAGETYPE_JPEG:
   $image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or die($error);
  break;
  case IMAGETYPE_PNG:
   $image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or die($error);
  break;
  default:
  break;
 }
 $query = 'insert into images(image_caption,image_username,image_date) values("'.$image_caption.'" , "'.$image_username.'","'.$image_date.'")';
 $result = mysql_query($query,$db) or die(mysql_error($db));
 $last_id = mysql_insert_id();
 // $imagename = $last_id.'.jpg';
 // imagejpeg($image,$dir.'/'.$imagename);
 // imagedestroy($image);
 $image_id = $last_id;
 imagejpeg($image , $dir.'/'.$image_id.'.jpg');
 imagedestroy($image);
}
else //如果图片已经上传,则从数据库中取图片名字
{
 $query = 'select image_id,image_caption,image_username,image_date from images where image_id='.$_POST['id'];
 $result = mysql_query($query,$db) or die(mysql_error($db));
 extract(mysql_fetch_assoc($result));
 list($width,$height,$type,$attr) = getimagesize($dir.'/'.$image_id.'.jpg');
}
//如果是保存图片
if($_POST['submit'] == 'Save')
{
 if(isset($_POST['id']) && ctype_digit($_POST['id']) && file_exists($dir.'/'.$_POST['id'].'.jpg'))
 {
  $image = imagecreatefromjpeg($dir.'/'.$_POST['id'].'.jpg');
 }
 else
 {
  die('invalid image specified');
 }
 $effect = (isset($_POST['effect'])) "images/<" alt="" />
  </body>
 </html>
<"images/<" alt="" style="float:left;" />-->
  </body>
 </html>
 <"<" style="float:left;" alt="" />
 <table>
  <tr>
   <td>Image save as:</td>
   <td><"<" method="post">
  <div>
   <input type="hidden" name="id" value="<"/>
   Filter:<select name="effect" id="">
    <option value="-1">None</option>
    <"'.IMG_FILTER_GRAYSCALE.'" ';
     if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GRAYSCALE)
     {
      echo 'selected="selected"';
     }
     echo ' >Black and white</option>';
     echo '<option value="'.IMG_FILTER_GAUSSIAN_BLUR.'"';
     if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GAUSSIAN_BLUR)
     {
      echo ' selected="selected"';
     }
     echo '>Blur</option>';
     echo '<option value="'.IMG_FILTER_EMBOSS.'"';
     if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_EMBOSS)
     {
      echo 'selected="selected"';
     }
     echo '>Emboss</option>';
     echo '<option value="'.IMG_FILTER_NEGATE.'"';
     if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_NEGATE)
     {
      echo 'selected="selected"';
     }
     echo '>Negative</option>';
    "checkbox" name="emb_caption"';
    if(isset($_POST['emb_caption']))
    {
     echo ' checked="checked"';
    }
    echo ' />Embed caption in image"checkbox" name="emb_logo" ';
    if(isset($_POST['emb_logo']))
    {
     echo 'checked="checked"';
    }
    echo ' />Embed watermarked logo in image"submit" value="Preview" name="submit" /><br /><br />
   <input type="submit" value="Save" name="submit" />
  </div>
 </form>
<"htmlcode">
<"arial";
if(isset($_GET['id']) && ctype_digit($_GET['id']) && file_exists($dir.'/'.$_GET['id'].'.jpg'))
{
 $image = imagecreatefromjpeg($dir.'/'.$_GET['id'].'.jpg');
}
else
{
 die('invalid image specified');
}
$effect = (isset($_GET['e'])) "text-align: center">PHP添加图片水印、压缩、剪切的封装类

注意主要的逻辑就是通过 imagecopymerge() 方法把两个图片合并在一起造成水印效果。来看看这个方法的方法原型和参数:

bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int$src_x , int $src_y , int $src_w , int $src_h , int $pct )

将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

以上内容是本文介绍PHP给图片添加水印 压缩 剪切的封装类的全部内容,希望大家对本文介绍感兴趣。

标签:
添加水印,图片添加水印

相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com

评论“PHP添加图片水印、压缩、剪切的封装类”

暂无PHP添加图片水印、压缩、剪切的封装类的评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?