当前位置: 首页 > news >正文

php用GD库给图片添加水印

php用GD库给图片添加文字水印,整个代码比较简单,DEMO如下:

<?php
    /*打开图片*/
    //1、配置图片路径
    $src = "aeroplane.jpg";
    //2、获取图片信息
    $info = getimagesize($src);
    //3、获取图片类型
    $type = image_type_to_extension($info[2], false);
    //4、在内存中创建一个和我们图像类型一样的图像
    $func = "imagecreatefrom{$type}";
    //5、把图片复制到我们的内存中
    $image = $func($src);


    /* 操作图片 */
    //1、设置字体路径
    $font = "STXINGKA.ttf";
    //2、填写水印内容
    $content = "你好 mooc";
    //3、设置字体颜色和透明度
    $color = imagecolorallocatealpha($image, 255, 255, 255, 50);
    //4、写入文字
    imagettftext($image, 60, 0, 60, 120, $color, $font, $content);

    /* 输出图片 */
    //1、浏览器输出
    header("Content-type:" . $info['mime']);
    $outputfunc = "image{$type}";
    $outputfunc($image);
    //2、保存图片
    $outputfunc($image, "newimage." . $type);

    /* 销毁图片 */
    imagedestroy($image);
?>

图片水印也类似:

<?php
    /*打开图片*/
    //1、配置图片路径
    $src = "aeroplane.jpg";
    //2、获取图片信息
    $info = getimagesize($src);
    //3、获取图片类型
    $type = image_type_to_extension($info[2], false);
    //4、在内存中创建图像
    $createImageFunc = "imagecreatefrom{$type}";
    //5、把图片复制内存中
    $image = $createImageFunc($src);


    /*操作图片*/
    //1、设置水印图片路径
    $imageMark = "logo.png";
    //2、获取水印图片基本信息
    $markInfo = getimagesize($imageMark);
    //3、获取水印图片类型
    $markType = image_type_to_extension($markInfo[2], false);
    //4、在内存创建图像
    $markCreateImageFunc = "imagecreatefrom{$markType}";
    //5、把水印图片复制到内存中
    $water = $markCreateImageFunc($imageMark);

    //特别处理,设置透明
    $color=imagecolorallocate($water,255,255,255);
    imagefill($water,0,0,$color);
    imagecolortransparent($water,$color);

    //6、合并图片
    imagecopymerge($image, $water, 20, 30, 0, 0, $markInfo[0], $markInfo[1], 30);
    //7、销毁水印图片
    imagedestroy($water);


    /* 输出图片 */
    //1、浏览器输出
    header("Content-type:" . $info['mime']);
    $outputfunc = "image{$type}";
    $outputfunc($image);
    //2、保存图片
    $outputfunc($image, "image_mark." . $type);


    /* 销毁图片 */
    imagedestroy($image);
?>

转载于:https://www.cnblogs.com/lurenjiashuo/p/php-watermark-demo.html

相关文章:

  • [性能]ulimit与systemtap
  • 问题1:javascript的函数对象问题
  • 进程大概枝杈【B篇】进程间通信
  • iOS开发中的错误整理,导航控制器的导航栏取消系统渲染的错误
  • 回顾 Swift 多平台移植进度 #2
  • css3 渐变实例2径向渐变
  • 重构第24天 分解复杂的判断(Remove Arrowhead Antipattern)
  • 数据库下载
  • 聊聊并发(四)深入分析ConcurrentHashMap
  • Android 使用ViewPager实现左右循环滑动图片
  • Python 命令行参数和getopt模块详解
  • 图的广度优先搜索(BFS)
  • Sql Server之旅——第九站 看公司这些DBA们设计的这些复合索引
  • svn服务器的搭建
  • Atitit.获取某个服务 网络邻居列表 解决方案
  • JS 中的深拷贝与浅拷贝
  • 2017前端实习生面试总结
  • Android Volley源码解析
  • Computed property XXX was assigned to but it has no setter
  • CSS 提示工具(Tooltip)
  • FineReport中如何实现自动滚屏效果
  • isset在php5.6-和php7.0+的一些差异
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • jquery ajax学习笔记
  • Making An Indicator With Pure CSS
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React系列之 Redux 架构模式
  • SegmentFault 2015 Top Rank
  • session共享问题解决方案
  • Spring Boot快速入门(一):Hello Spring Boot
  • 产品三维模型在线预览
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 对JS继承的一点思考
  • 关于 Cirru Editor 存储格式
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)357
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何合理的规划jvm性能调优
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​批处理文件中的errorlevel用法
  • # .NET Framework中使用命名管道进行进程间通信
  • #define
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (接口自动化)Python3操作MySQL数据库
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (学习日记)2024.01.19
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Memory Profiler的使用举例
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [20150629]简单的加密连接.txt