php对图片加水印--将一张图片作为水印加到另一张图片

代码如下:

/**
     * 图片加水印(适用于png/jpg/gif格式)
     *
     * @param $srcImg  原图片
     * @param $waterImg 水印图片
     * @param $savepath 保存路径
     * @param $savename 保存名字
     * @param $positon  水印位置:1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
     * @param $alpha   透明度:0:完全透明, 100:完全不透明
     *
     * @return 成功 -- 加水印后的新图片地址
     *   失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败,-4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
     */
    function water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=1, $alpha=50){
        //判断文件是否存在
        $srcImgInfo = @getimagesize($srcImg);
        if(!$srcImgInfo){
            return -1;
        }
        $waterImgInfo = @getimagesize($waterImg);
        if(!$waterImgInfo){
            return -1;
        }

        //建立图像对象
        $srcImgObj = image_create_from_ext($srcImg, $srcImgInfo[2]);
        if(!$srcImgObj){
            return -3; //原文件图像对象建立失败
        }
        $waterImgObj = image_create_from_ext($waterImg, $waterImgInfo[2]);
        if(!$waterImgObj){
            return -4; //原文件图像对象建立失败
        }

        //准备信息:保存路径,保存文件名
        $temp = pathinfo($srcImg);
        $name = $temp[‘basename‘];
        $path = $temp[‘dirname‘];
        $ext  = $temp[‘extension‘];
        $savename = $savename ? $savename : $name;
        $savepath = $savepath ? $savepath : $path;
        $savefile = $savepath .‘/‘. $savename;

        //确定生成水印的位置
        switch($positon){
            //1顶部居左
            case 1:
                $x=$y=0;
                break;
            //2顶部居右
            case 2:
                $x = $srcImgInfo[0]-$waterImgInfo[0]; $y = 0;
                break;
            //3居中
            case 3:
                $x = ($srcImgInfo[0]-$waterImgInfo[0])/2; $y = ($srcImgInfo[1]-$waterImgInfo[1])/2;
                break;
            //4底部居左
            case 4:
                $x = 0; $y = $srcImgInfo[1]-$waterImgInfo[1];
                break;
            //5底部居右
            case 5:
                $x = $srcImgInfo[0]-$waterImgInfo[0]; $y = $srcImgInfo[1]-$waterImgInfo[1];
                break;
             default:
                $x=$y=0;
        }

        //添加水印图片
        imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $srcImgInfo[0]/2, $srcImgInfo[1]/2, $alpha);
        //输出图片
        switch ($srcImgInfo[2]) {
            case 1:
                imagegif($srcImgObj, $savefile);
                break;
            case 2:
                imagejpeg($srcImgObj, $savefile);
                break;
            case 3:
                imagepng($srcImgObj, $savefile);
                break;
            default:
                return -5; //保存失败
        }
        //销毁图像资源
        imagedestroy($srcImgObj);
        imagedestroy($waterImgObj);
        return $savefile;

    }
    /*
    * 创建图像对象
    * @param $imgFile 图片路径
    * @param $imgExt  图片扩展名
    * @return $im 图像对象
    **/
    function image_create_from_ext($imgFile, $imgExt){
        $im = null;
        switch ($imgExt) {
            case 1:
                $im=imagecreatefromgif($imgFile);
                break;
            case 2:
                $im=imagecreatefromjpeg($imgFile);
                break;
            case 3:
                $im=imagecreatefrompng($imgFile);
                break;
        }
        return $im;
    }

调用方法:

//调用测试
    $res = water_mark(‘F:\test\test1.jpg‘, ‘F:\test\logo.png‘, null, ‘res.jpg‘);
    var_dump($res);

原文地址:https://www.cnblogs.com/wxdblog/p/8658724.html

时间: 2024-10-07 23:10:05

php对图片加水印--将一张图片作为水印加到另一张图片的相关文章

赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

上一篇已经介绍了Android种Bitmap和Canvas的使用,下面我们来写一个具体实例 http://blog.csdn.net/zhaoyazhi2129/article/details/32136179 运行效果: 主要代码 package com.example.guaguale; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import and

【JavaScript】使用纯JS实现多张图片的懒加载Lazy(附源码)

一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背景图 4.加载图片的时候,有渐进显示图片效果 二.难点 1)如何Ajax请求数据 2)如何动态将json数据绑定到html中. 3)如何通过对图片的定位计算,触发图片懒加载机制 4)加分项,显示图片时有渐现的过渡动画 三.前期知识点 1)Ajax相关知识,XMLHttpRequest对象,所有现代的

tableview加载图片的时候的优化之lazy(懒加载)模式and异步加载模式

iOS---tableview加载图片的时候的优化之lazy(懒加载)模式and异步加载模式举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动经过了,图片就开始加载了,这样用户体验就不太好,而且浪费内存.这个时候,我们就可以利用lazy加载技术,当界面滑动或者滑动减速的时候,都不进行图片加载,只有当用户不再滑动并且减速效果停止的时候,才进行加载.刚开始我异步加载图片利用SDWebImage来做

这个图片转PDF技巧,让你只加效率不加班

作为一枚久经职场的工作人员,不晓得图片转PDF技巧是万万不行的,今天就为大家分享图片转PDF技巧,让你只加效率不加班,一起看看下文见识一番吧. 1.首先打开PDF在线转换平台-pdf365.cn: 2.点击"图片转PDF"图标,进入PDF文档上传页面,将需要转换的图片文档添加到窗口中: 3.点击"开始转换"即可实现图片转PDF: 4.PDF文档转换成功后,点击"下载"按钮,即可拿到转换后的文档: 以上就是图片转PDF技巧啦,是不是特么特么简单,仅

网页加载速度优化4--图片懒加载

当前网页设计理念主要以大气简洁主流(文艺小清新网站例外).更多的信息用图片来展示. 由于图片都是高清,所以会影响到网页加载速度.这里我们就用到图片的懒加载(延迟加载)功能. 最快速解决方案:jquery lazyload插件. Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多大图片长页面中延迟加载图片可以加

wan口mac=lan口mac加一,wlan是lan口mac加二

(1)路由器有两个mac地址,一个用于外网(wan),一个用于内网(wlan和lan): (2)一般路由器上面或者配置路由器的网页上面只标注外网的mac地址: (3)内网的mac地址和外网mac地址一般只有几位不同(甚至连续,也有些相差很多的例外). Dlink的默认wan口mac=lan口mac加一,wlan是lan口mac加二,在mac地址克隆功能中可以修改对广域网wlan的mac地址,理论上一个网口 LAN MAC WAN MAC 和 WLAN MAC的关系 给一个范例: 00:0C:E5

什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?(转)

所谓懒加载(lazy)就是延时加载,延迟加载. 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载. 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到了懒加载. 比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来.但是实际上有时候只是需要

未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配

信息: 未能加载视图状态.正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配.例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配. 数据源: System.Web 堆栈信息: 在 System.Web.UI.Control.LoadViewStateRecursive(Object savedState) 在 System.Web.UI.Control.LoadChildViewStateByIndex(ArrayLis

java中三个类别加载器的关系以及各自加载的类的范围

Java在需要使用类别的时候,才会将类别加载,Java的类别载入是由类别载入器(Class loader)来达到的,预设上,在程序启动之后,主要会有三个类别加载器:Bootstrap Loader.ExtClassLoader与AppClassLoader. Bootstrap Loader是由C++撰写而成,预设上它负责搜寻JRE所在目录的classes或lib目录下的.jar档案中(例如rt.jar)是否有指定的类别并加载(实际上是由系统参数sun.boot.class.path指定):预设

未能加载文件或程序集“BLL”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。

今天使用VS2012创建项目的时候,考虑到项目中代码的重用性以及清晰简洁性,搭建了一个三层架构,但是在项目运行的时候,总是报错: “未能加载文件或程序集“BLL”或它的某一个依赖项.生成此程序集的运行时比当前加载的运行时新,无法加载此程序集.” 在网上查找了半天也没有更好的办法,突然,灵感一现,修改.net版本,果断解决这个问题, 一开始是使用的版本是3.5:修改后的版本是:4.5 修改方法: 项目=>右键=>属性=>目标 framework=>选择版本