java给图片添加图片水印,设置样式平铺,拉伸

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageUtil {

    /**
     * 给图片添加水印
     * @param originImgPath 原始图片的路径
     * @param targetImgPath 添加水印后图片的保存路径
     * @param markImgPath 水印的路径
     * @param mode 内部枚举类,用于指定水印铺设的样式,平铺,拉伸等
     * @param margin_x 水印之间的水平间距
     * @param margin_y 水印之间的垂直间距
     * @param opacity 水印透明度
     * @param markAngle 水印旋转角度,应在正负45度之间
     * @throws IOException
     */
    public static void markImage(String originImgPath,String targetImgPath,String markImgPath,int mode,int margin_x,int margin_y,float opacity,double markAngle) throws IOException {
        if(markAngle>45||markAngle<-45){
            throw new RuntimeException("旋转角度必须在正负45度之间。");
        }
        BufferedImage originImg= ImageIO.read(new File(originImgPath));
        BufferedImage markImage = ImageIO.read(new File(markImgPath));
        Graphics2D graphics = (Graphics2D) originImg.getGraphics();
        graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, opacity));
        graphics.rotate(markAngle);

        if(mode == PAINT_MODE.TILED.mode){
            int canvasHeight = originImg.getHeight();
            int canvasWidth = originImg.getWidth();
            int markHeight = markImage.getHeight();
            int markWidth = markImage.getHeight();
            int interval = markWidth+markHeight;
            for(int i=-canvasHeight;i<canvasWidth+canvasHeight;i=i+interval+margin_x){
                for(int j=-canvasWidth;j<canvasHeight+canvasWidth;j=j+interval+margin_y){
                    graphics.drawImage(markImage,i,j,markImage.getWidth(),markImage.getHeight(),null);
                }
            }
        }
        graphics.dispose();
        ImageIO.write(originImg,"png",new File(targetImgPath));
    }

    //内部枚举类
    enum PAINT_MODE{
        REGULAR(0),//常规
        TILED(1),//平铺
        STRETCHED(2);//拉伸
        private int mode;
        PAINT_MODE(int mode){
            this.mode = mode;
        }
    }

    //测试main方法
    public static void main(String[] args) {
        try {
            markImage("D:/source.png","D:/target.png","D:/mark.png",PAINT_MODE.TILED.mode,50,50,0.5f,-45);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  效果图:

issue:1.只贴了平铺样式,拉伸只需要将水印图片的长宽设置为和源图片一样大。常规样式只需不循环遍历即可。

     2.旋转有一定的空间浪费,我本想通过三角函数计算旋转特定角度后循环的起止X,y轴位置,但是计算结果应用后并不能达到预期效果,只好给一个较大的定值。

     3.添加文字水印更为简单,只需调用graphics2D的drawString方法,并设置字体和颜色即可。希望有需求的朋友多多动手。

原文地址:https://www.cnblogs.com/lvsunshine21/p/10223629.html

时间: 2024-10-28 20:17:07

java给图片添加图片水印,设置样式平铺,拉伸的相关文章

php给图片添加文字水印

PHP对图片的操作用到GD库,这里我们介绍如何给图片添加文字水印. 大致分为四步: 1.打开图片 2.操作图片 3.输出图片 4.销毁图片 下面我们上代码来具体讲解每步的实现过程: <?php /*打开图片*/ //1.配置图片路径 $src = "bg.jpg"; //2.获取图片信息 $info = getimagesize($src); //3.通过编号获取图像类型 $type = image_type_to_extension($info[2],false); //4.在

php 图片添加文字水印 以及 图片合成(微信快码传播)

1.图片添加文字水印: $bigImgPath = 'backgroud.png'; $img = imagecreatefromstring(file_get_contents($bigImgPath)); $font = 'msyhl.ttc';//字体 $black = imagecolorallocate($img, 0, 0, 0);//字体颜色 RGB $fontSize = 20; //字体大小 $circleSize = 60; //旋转角度 $left = 50; //左边距

php给图片添加文字水印方法汇总

在php中要给图片加水印我们需要给php安装GD库了,这里我们不介绍GD库安装,只介绍怎么利用php给图片添加文字水印的4种方法的汇总.有需要的小伙伴可以参考下. 1: 面向过程的编写方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //指定图片路径 $src = '001.png'; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image_type_to_ex

php图片添加文字水印方法汇总

方法一: <?php header("content-type:text/html;charset=utf-8"); //指定图片路径 $src = "img/a.png"; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image_type_to_extension($info[2],false); // echo $type; // exit; //动态的把图片导入内存中 $fun = &qu

图片添加文字水印 和图片水印

<?php /** * @desc 图片处理类 */ class Pic{ private $info; private $res; public $thumb_pic; public function __construct($picPath){ //获取图片信息 $this->info = getimagesize($picPath); //获取图片名 $this->info['type'] = image_type_to_extension($this->info[2],fa

php使用GD库实现图片水印和缩略图——给图片添加图片水印

今天呢,就来学习一下在php中使用PD库来实现对图片水印的文字水印方法,不需要PS哦! 首先,准备素材 (1)准备一张图片 (2)准备一张水印(最好是透明的,即背景是白色底) (3)准备一中字体(在电脑中C:\Windows\Fonts位置里有,其中找一个自己喜欢的复制就行) (4)把上面3步准备的东西都放在一个文件夹中(在www文件夹目录下) 这是我的准备啦! (5)开启GD库功能(在php.ini文件中,把前面的分号去掉,重启服务器) 1.新建一个php文件(imageziti.php) 2

在PHP中给图片添加图片水印

<?php //判断GD库是否存在 if (function_exists('imagepng')) { dir('GD库不存在'); } //图片路径 $imagePath = './img/a.jpg'; //图片信息 $imageInfo = getimagesize($imagePath); //图片扩展名 $imageExtension = image_type_to_extension($imageInfo[2], false); //获取图片 $func = 'imagecreat

PIL图片添加文字水印

python PIL图像处理中添加文字水印 代码如下: 运行效果图: 原文地址:https://www.cnblogs.com/VYao/p/9753502.html

在PHP中给图片添加文字水印

<?php if (function_exists('imagepng')) { dir('GD库不存在'); } //图片路径 $imagePath = './img/a.jpg'; //获取文件类型 $imageInfo = getimagesize($imagePath); $imageExtension = image_type_to_extension($imageInfo[2], false); //获取图片 $func = 'imagecreatefrom' . $imageExt