PHP一个使用GD库生成水印的方法

查看示例

/* 
 * 图片加水印函数
 * $dst_file : 处理完成后保存到此文件路径
 * $src_file :待处理的图片文件路径
 * $logo_file:水印的图片文件路径
 * $top      :上间距
 * $left     :左间距
 * $alpha    :透明度(0-100)【特别注意:若logo_file本身已有透明效果,请务必传false】
 */
public static function fullFillLogos($dst_file, $src_file, $logo_file, $top=0, $left=0, $alpha=false) {
    try {
        //创建图片的实例
        $dst = imagecreatefromstring(file_get_contents($src_file));
        $logo = imagecreatefromstring(file_get_contents($logo_file));
        //获取宽高
        list($logo_w, $logo_h) = getimagesize($logo_file);
        list($dst_w, $dst_h) = getimagesize($src_file);
        //循环铺上水印
        for($off_y=$top; $off_y+$top<$dst_h; $off_y+=$logo_h+$top) {
            for($off_x=$left; $off_x+$left<$dst_w; $off_x+=$logo_w+$left) {
                $width = ($off_x+$logo_w+$left>$dst_w) ? ($dst_w-$off_x-$left) : $logo_w;
                $height = ($off_y+$logo_h+$top>$dst_h) ? ($dst_h-$off_y-$top) : $logo_h;
                if($alpha === false) {
                    imagecopy($dst, $logo, $off_x, $off_y, 0, 0, $width, $height);
                } else {
                    imagecopymerge($dst, $logo, $off_x, $off_y, 0, 0, $width, $height, $alpha);
                }
            }
        }
        //水印完成, 存档...
        header('Content-Type: image/jpeg');
        imagejpeg($dst, $dst_file);
        imagedestroy($dst);
        imagedestroy($logo);
    } catch (Exception $e) {
        return false;
    }
    return true;
}