问题:背景透明的水印图片,在加到原图上后不显示,待解决

  1. <?php
  2. /**
  3. * 图片加水印(适用于png/jpg/gif格式)
  4. *
  5. * @author flynetcn
  6. *
  7. * @param $srcImg 原图片
  8. * @param $waterImg 水印图片
  9. * @param $savepath 保存路径
  10. * @param $savename 保存名字
  11. * @param $positon 水印位置
  12. * 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
  13. * @param $alpha 透明度 -- 0:完全透明, 100:完全不透明
  14. *
  15. * @return 成功 -- 加水印后的新图片地址
  16. * 失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
  17. * -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
  18. */
  19. img_water_mark('15.png','shuiyin.png');
  20.  
  21. function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=100)
  22. {
  23. $temp = pathinfo($srcImg);
  24. $name = $temp['basename'];
  25. $path = $temp['dirname'];
  26. $exte = $temp['extension'];
  27. $savename = $savename ? $savename : $name;
  28. $savepath = $savepath ? $savepath : $path;
  29. $savefile = $savepath .'/'. $savename;
  30. $srcinfo = @getimagesize($srcImg);
  31. if (!$srcinfo) {
  32. return -1; //原文件不存在
  33. }
  34. $waterinfo = @getimagesize($waterImg);
  35. if (!$waterinfo) {
  36. return -2; //水印图片不存在
  37. }
  38. $srcImgObj = image_create_from_ext($srcImg);
  39. if (!$srcImgObj) {
  40. return -3; //原文件图像对象建立失败
  41. }
  42. $waterImgObj = image_create_from_ext($waterImg);
  43. if (!$waterImgObj) {
  44. return -4; //水印文件图像对象建立失败
  45. }
  46. switch ($positon) {
  47. //1顶部居左
  48. case 1: $x=$y=0; break;
  49. //2顶部居右
  50. case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
  51. //3居中
  52. case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
  53. //4底部居左
  54. case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
  55. //5底部居右
  56. case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
  57. default: $x=$y=0;
  58. }
  59. imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
  60. switch ($srcinfo[2]) {
  61. case 1: imagegif($srcImgObj, $savefile); break;
  62. case 2: imagejpeg($srcImgObj, $savefile); break;
  63. case 3: imagepng($srcImgObj, $savefile); break;
  64. default: return -5; //保存失败
  65. }
  66. imagedestroy($srcImgObj);
  67. imagedestroy($waterImgObj);
  68. return $savefile;
  69. }
  70.  
  71. function image_create_from_ext($imgfile)
  72. {
  73. $info = getimagesize($imgfile);
  74. $im = null;
  75. switch ($info[2]) {
  76. case 1: $im=imagecreatefromgif($imgfile); break;
  77. case 2: $im=imagecreatefromjpeg($imgfile); break;
  78. case 3: $im=imagecreatefrompng($imgfile); break;
  79. }
  80. return $im;
  81. }

_________________

php 图片加水印插件的更多相关文章

  1. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  2. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  3. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  4. php 分享两种给图片加水印的方法

    本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...

  5. Java图片处理(二)图片加水印

    图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...

  6. PHP给图片加水印

    <?php /** *图片加水印 *@param $srcImg 原图 *@param $waterImg 水印图片 *@param $savepath 保存路径 *@param $savena ...

  7. 如何用node.js批量给图片加水印

    上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...

  8. 使用 ImageEnView 给图片加水印,及建缩略图

    摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses  Math,imag ...

  9. php对图片加水印--将图片先缩小,再在上面加水印

    方法: /**  * 图片加水印(适用于png/jpg/gif格式)  *  * @author flynetcn  *  * @param $srcImg  原图片  * @param $water ...

  10. php对图片加水印--将文字作为水印加到图片

    方法代码: /**  * 图片加水印(适用于png/jpg/gif格式)  *  * @author flynetcn  *  * @param $srcImg  原图片  * @param $wat ...

随机推荐

  1. MySQL联合索引的创建规则

    1.索引应该按照最常用于查询的列的顺序创建.这样可以最大程度地提高查询性能. 2.如果查询中包含的列与索引中的列顺序不一致,则无法使用索引.因此,如果您有多个查询,每个查询都包含不同的列,那么最好为每 ...

  2. sentry-sdk 使用

    一.代码 import os import random import logging import sentry_sdk from sentry_sdk.tracing import Transac ...

  3. 初识redis之性能测试

    最近接触一项新技术的方法都是通过测试来入门的.对测试这件事情有了新的认识,觉得是类似做实验的一种方式.尤其对于后端,测试的性能指标是技术选型的重要参考. 好了,如果你想做一下redis的性能测试,不要 ...

  4. 页面导出为PDF

    一.使用环境 Vue3.Quasar.Electron 二.安装 jspdf-html2canvas npm install jspdf-html2canvas --save 安装失败可以选择cnpm ...

  5. 2022-04-27内部群每日三题-清辉PMP

    1.对一个关键项目的要求是产品的持续可追溯性,质量团队建议在制造过程的每个步骤创建检查点.然而,这些检查点耗费了宝贵的时间和资源.项目经理应执行什么类型的分析来确定适当的检查点数量? A.备选方案分析 ...

  6. GitLab能通过ssh克隆无法通过http克隆,也无法进行流水线,提示port 80: Connection refused

    问题记录:VM-Ubuntu20.04刚开始时使用NAT模式连接,后来改成桥接模式,改完之后原来使用docker启动的gitlab服务无法克隆,一直提示:fatal...没有远程库什么的,没解决后来删 ...

  7. Lua中创建新的文件夹

    如下: os.execute('mkdir 文件夹名称')

  8. git如何把本地文件夹和远程仓库关联

    场景: 1,有一个本地项目,没有上传到git过,你在远程新建了一个仓库,想把这个本地的代码推送到该仓库 2,直接想把本地代码推送到远程并创建该本地文件对应的仓库(这种情况不可以实现) 解决方法: 本地 ...

  9. Java基础_字符串比较

    字符串之间的比较 compareTo "==" equals compareTo 示例: compareTo(string) compareToIgnoreCase(String) ...

  10. Python 切片/列表/字符串之间装换

    1. 怎么实现字符串变为list 使用split(),把字符串拆分再存入数组: 例子 input="ni si shi" output=input.split(" &qu ...