项目中打印条形码的函数,从thinkphp自带的water函数修改而来的。

贴上代码:

/**
  * water2
  * 改写thinkphp的water函数更强健的函数,增加了写入位置参数
    去掉了alpha设定参数,以修正打出的水印不清晰的bug
  * @param string $source 原图文件名
  * @param string $water 水印图片文件名
  * @param int $waterPos 要打水印的位置
  * @param string $savename 要保存的图片名,如果留空则用source
  * @return void
  */
function water2($source,$water,$waterPos=1,$savename=null)
{
    import('ORG.Util.Image');
    //检查文件是否存在
    if(!file_exists($source)||!file_exists($water))
        return false;

    //图片信息
    $sInfo=Image::getImageInfo($source);
    $wInfo=Image::getImageInfo($water);

    //如果图片小于水印图片,不生成图片
    if($sInfo["width"]<$wInfo["width"] || $sInfo['height']<$wInfo['height'])
        return false;

    //建立图像
    $sCreateFun="imagecreatefrom".$sInfo['type'];
    $sImage=$sCreateFun($source);
    $wCreateFun="imagecreatefrom".$wInfo['type'];
    $wImage=$wCreateFun($water);

    //设定图像的混色模式
   imagealphablending($wImage, true);

   switch($waterPos){
        case 0://随机
            $posX = rand(0,($sInfo["width"] - $wInfo["width"]));
            $posY = rand(0,($sInfo["height"] - $wInfo["height"]));
            break;
        case 1://1为顶端居左
            $posX = 8;
            $posY = 8;
            break;
        case 2://2为顶端居中
            $posX = ($sInfo["width"] - $wInfo["width"])/2;
            $posY = 0;
            break;
        case 3://3为顶端居右
            $posX = $sInfo["width"] - $wInfo["width"];
            $posY = 0;
            break;
        case 4://4为中部居左
            $posX = 0;
            $posY = ($sInfo["height"] - $wInfo["height"])/2;
            break;
        case 5://5为中部居中
            $posX = ($sInfo["width"] - $wInfo["width"])/2;
            $posY = ($sInfo["height"] - $wInfo["height"])/2;
            break;
        case 6://6为中部居右
            $posX = $sInfo["width"] - $wInfo["width"];
            $posY = ($sInfo["height"]  - $wInfo["height"])/2;
            break;
        case 7://7为底端居左
            $posX = 0;
            $posY = $sInfo["height"] - $wInfo["height"];
            break;
        case 8://8为底端居中
            $posX = ($sInfo["width"] - $wInfo["width"])/2;
            $posY = $sInfo["height"]- $wInfo["height"];
            break;
        case 9://9为底端居右
            $posX = $sInfo["width"] - $wInfo["width"]-8;
            $posY = $sInfo["height"] - $wInfo["height"]-8;
            break;
        default://随机
            $posX = rand(0,($sInfo["width"] - $wInfo["width"]));
            $posY = rand(0,($sInfo["height"] - $wInfo["height"]));
            break;
     }

    //生成混合图像
     //imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'],$wInfo['height'],$alpha);
     imagecopy($sImage, $wImage,$posX, $posY, 0, 0,$wInfo["width"],$wInfo["height"]);

    //输出图像
    $ImageFun='Image'.$sInfo['type'];
    //如果没有给出保存文件名,默认为原图像名
    if(!$savename){
        $savename=$source;
        @unlink($source);
    }
    //保存图像
    $ImageFun($sImage,$savename);
    imagedestroy($sImage);
}

thinkphp中Image.class.php的getImageInfo方法:

    /**
     +----------------------------------------------------------
     * 取得图像信息
     *
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image 图像文件名
     +----------------------------------------------------------
     * @return mixed
     +----------------------------------------------------------
     */
    static function getImageInfo($img) {
        $imageInfo = getimagesize($img);
        if( $imageInfo!== false) {
            if(function_exists(image_type_to_extension)){
                $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));
            }else{
                $imageType = strtolower(substr($img,strrpos($img,'.')+1));
            }
            $imageSize = filesize($img);
            $info = array(
                "width"=>$imageInfo[0],
                "height"=>$imageInfo[1],
                "type"=>$imageType,
                "size"=>$imageSize,
                "mime"=>$imageInfo['mime']
            );
            return $info;
        }else {
            return false;
        }
    }

thinkphp中的water函数:

  /**
     +----------------------------------------------------------
     * 为图片添加水印
     +----------------------------------------------------------
     * @static public
     +----------------------------------------------------------
     * @param string $source 原文件名
     * @param string $water  水印图片
     * @param string $$savename  添加水印后的图片名
     * @param string $alpha  水印的透明度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     * @throws ThinkExecption
     +----------------------------------------------------------
     */

    static public function water($source,$water,$savename=null,$alpha=80)
    {
        //检查文件是否存在
        if(!file_exists($source)||!file_exists($water))
            return false;

        //图片信息
        $sInfo=self::getImageInfo($source);
        $wInfo=self::getImageInfo($water);

        //如果图片小于水印图片,不生成图片
        if($sInfo["width"]<$wInfo["width"] || $sInfo['height']<$wInfo['height'])
            return false;

        //建立图像
        $sCreateFun="imagecreatefrom".$sInfo['type'];
        $sImage=$sCreateFun($source);
        $wCreateFun="imagecreatefrom".$wInfo['type'];
        $wImage=$wCreateFun($water);

        //设定图像的混色模式
        imagealphablending($wImage, true);

        //图像位置,默认为右下角右对齐
        $posY=$sInfo["height"]-$wInfo["height"];
        $posX=$sInfo["width"]-$wInfo["width"];

        //生成混合图像
         imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'],$wInfo['height'],$alpha);

        //输出图像
        $ImageFun='Image'.$sInfo['type'];
        //如果没有给出保存文件名,默认为原图像名
        if(!$savename){
            $savename=$source;
            @unlink($source);
        }
        //保存图像
        $ImageFun($sImage,$savename);
        imagedestroy($sImage);

    }

thinkphp给图片打水印不清晰的更多相关文章

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

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

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

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

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

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

  4. JAVA给图片加上水印

    import java.awt.Color;       import java.awt.Font;       import java.awt.Graphics;       import java ...

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

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

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

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

  7. Nginx Image Module图片缩略图 水印处理模块

    Nginx Image Module图片缩略图 水印处理模块 下载Tengine tar -zxvf tengine-1.4.5.tar.gz cd tengine-1.4.5 下载Nginx tar ...

  8. javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  9. 四:Java使用google的thumbnailator工具对图片压缩水印等做处理

    Thumbnailator是一个非常好的图片开源工具 使用方法: 在pom中加入以下jar包 <!-- 图片缩略图 图片压缩 水印 start--> <dependency>& ...

随机推荐

  1. javabean以及内省技术详解(转)

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  2. PHP中如何防止SQL注入

    这是StackOverFlow上一个投票非常多的提问 How to prevent SQL injection in PHP?  我把问题和赞同最多的答题翻译了下来. 提问:如果用户的输入能直接插入到 ...

  3. 【转】在Windows下搭建React Native Android开发环境

    http://www.jianshu.com/p/2fdc4655ddf8 安装JDK 从Java官网下载JDK并安装.请注意选择x86还是x64版本. 推荐将JDK的bin目录加入系统PATH环境变 ...

  4. 横竖屏事件响应(viewWillLayoutSubviews和通知)两种方式

    转载:http://blog.csdn.net/nogodoss/article/details/17246489 最近搞横竖屏,获得一些心得,特记录下来. 做横竖屏最重要的是确定横竖屏响应的接口.目 ...

  5. HDU5100Chessboard(数论)

    HDU5100Chessboard(数论) 题目链接 题目大意:用k∗1的瓷砖区铺n∗n的矩形,问能铺上的最大的面积. 解题思路:这题没有直接得出结论:l = n%k, ans = max[(n^2 ...

  6. ThinkPHP3.1 常量参考

    预定义常量 常量 说明 URL_COMMON=0 普通模式 URL URL_PATHINFO=1 PATHINFO URL URL_REWRITE=2 REWRITE URL URL_COMPAT=3 ...

  7. excel重复数据

    =COUNTIF(H:H,H1)>1

  8. [React Native] Passing data when changing routes

    The way you make HTTP requests in React Native is with the Fetch API. In this video we'll talk about ...

  9. android87 Service

    ---------------------------------------------------------------------------- #Service(服务和Activity是运行 ...

  10. 台湾书籍代购网址——2013-08-25 16

    台湾书籍代购 博客来http://www.books.com.tw 三民http://www.sanmin.com.tw 诚品http://www.eslite.com 金石堂http://www.k ...