侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

php  /  管理员 发布于 7年前   341

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

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

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

        第一步:打开图片

        第二步:操作图片

        第三步:输出图片

        第四步:销毁图片

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

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

直接上代码:

info=getimagesize($src);  $this->type=image_type_to_extension($this->info['2'],false);  $fun="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);  } } ?>

如果还需要其他操作,只需要再往这个类里面添加就好啦~~

给图片添加水印代码:

先看文件check_image_addwatermark.php代码

      Here is your pic!       

Your image has been saved!

Here is your pic!

So how does it feel to be famous?

Here is the picture you just uploaded to your servers:

Image save as:
Height:
Widht:
Upload date:

You may apply a special effect to your image from the list of option below. Note:saving an image with any of the filters applied can be undone

Filter:
Embed caption in image?'; echo '
'; //添加水印选项 echo 'Embed watermarked logo in image?'; ?>

这里面主要是添加水印选项,如果选中添加水印则将logo.png作为水印图片和原来的图片合并在一起。

在预览文件中添加了对应的逻辑,代码如下:

最后上传的水印图片效果如下:

注意主要的逻辑就是通过 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给图片添加水印 压缩 剪切的封装类的全部内容,希望大家对本文介绍感兴趣。

您可能感兴趣的文章:

  • PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
  • PHP图片裁剪函数(保持图像不变形)
  • PHP图像识别技术原理与实现
  • PHP中绘制图像的一些函数总结
  • php图像处理函数大全(推荐收藏)
  • php使用imagick模块实现图片缩放、裁剪、压缩示例
  • 基于PHP实现等比压缩图片大小
  • 浅谈关于PHP解决图片无损压缩的问题
  • php高清晰度无损图片压缩功能的实现代码
  • PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】


  • 上一条:
    深入讲解PHP Session及如何保持其不过期的方法
    下一条:
    php中switch语句用法详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客