PHP水印处理

php水印图
  这一次将所有图片都进行了一次加水印的处理,代码分享一下,做了一个操作就是先将水印加载到图片的底部,并且留下一个透明的影音。
  上面的是原图,挺简单的,不过做得很烦。
  还有这个LOGO,美工不行就是这样的,悲剧。

<?php
    /**
     * 将一张图片和水印进行融合
     * @param resource $img   元素图片资源
     * @param resource $water 水印资源
     * @param float    $point 水印高度最大百分比 0 - 100
     * @param int      $alpha 底部横条透明度 0 - 128
     */

    function create_watermark_picture(&$img, $water, $point, $alpha){
        $point /= 100; //还原百分比为浮点数
        $w_w = imagesx($water);
        $w_h = imagesy($water);
        $i_w = imagesx($img);
        $i_h = imagesy($img);
        $height = $w_h;
        if($w_h > $i_h * $point) //水印位置图片高度
            $height = $i_h * $point;
        $width = $height * $w_w / $w_h; //计算水印位置图片宽度
        $color = imagecolorallocatealpha($img, 0, 0, 0, $alpha); //获取一个透明度为$alpha的颜色
        imagefilledrectangle($img, 0, $i_h - $height, $i_w, $i_h, $color); //用颜色填充一个矩形框
        imagecopyresampled($img, $water, ($i_w - $width) / 2, $i_h - $height, 0, 0, $width, $height, $w_w, $w_h); //复制水印到图片上去
    }

    /**
     * 获取某一文件夹下的文件列表
     * @param dir_path $path
     * @return array
     */

    function get_file_list($path){
        $handler = opendir($path);
        $rt = array();
        if($handler){
            while($file = readdir($handler)){
                if($file == '.' || $file == '..')
                    continue;
                if(is_file($path . "/" . $file))
                    $rt[] = $path . "/" . $file;
            }
        }
        return $rt;
    }

    /**
     * 获取图片的资源句柄
     * @param $path file_path
     * @return null|resource
     */

    function get_image_resource($path){
        if(is_file($path) && is_readable($path)){
            $info = getimagesize($path);
            $img = null;
            if(isset($info[2])){
                switch($info[2]) //取得水印图片的格式
                {
                    case IMAGETYPE_GIF:
                        $img = imagecreatefromgif($path);
                        break;
                    case IMAGETYPE_JPEG:
                        $img = imagecreatefromjpeg($path);
                        break;
                    case IMAGETYPE_PNG:
                        $img = imagecreatefrompng($path);
                        break;
                    case IMAGETYPE_WBMP:
                    case IMAGETYPE_BMP:
                        $img = imagecreatefromwbmp($path);
                        break;
                        return null;
                }
            }
            return $img;
        }
        else{
            return null;
        }
    }

    /**
     * 保存图片到原始路径
     * @param $img  image_resource
     * @param $path file_path
     */

    function save_image($img, $path){
        if(!is_writable($path)){
            echo "$path can't write<br>\n";
            return;
        }
        if(is_file($path) && is_readable($path)){
            $info = getimagesize($path);
            if(isset($info[2])){
                switch($info[2]) //取得水印图片的格式
                {
                    case IMAGETYPE_GIF:
                        imagegif($img, $path);
                        break;
                    case IMAGETYPE_JPEG:
                        imagejpeg($img, $path);
                        break;
                    case IMAGETYPE_PNG:
                        imagepng($img, $path);
                        break;
                    case IMAGETYPE_WBMP:
                    case IMAGETYPE_BMP:
                        imagewbmp($img, $path);
                        break;
                }
            }
        }
        imagedestroy($img);
    }

    /**
     * 开始执行
     * @param $dir_path   file_dir_path
     * @param $water_path watermark_file_path
     */

    function run($dir_path, $water_path){
        $water = get_image_resource($water_path);
        imagesavealpha($water,true);
        foreach(get_file_list($dir_path) as $file){
            $img = get_image_resource($file);
            imagesavealpha($img,true);
            if(!$img)
                continue;
            create_watermark_picture($img, $water, 3.5, 100);
            save_image($img, $file);
            echo $file, "<br>\n";
        }
    }

    header("Content-Type: text/html; charset=utf-8");
    set_time_limit(0);
    run("F:/test", "image/watermark_php.png");
?>

2条评论在“PHP水印处理”

写下你最简单的想法