>  기사  >  Java  >  Java에서 텍스트 워터마크 및 그림 워터마크 기능을 추가하는 방법

Java에서 텍스트 워터마크 및 그림 워터마크 기능을 추가하는 방법

王林
王林앞으로
2023-05-23 08:56:121711검색

    워터마크 추가

    사진에 워터마크를 추가하는 주된 목적은 사진의 저작권을 보호하여 허가받지 않은 사람이 사진을 사용하거나 유포하는 것을 방지하는 것입니다. 이미지에 워터마크를 추가하는 것은 일반적인 이미지 처리 기술입니다. Java JDK와 함께 제공되는 Graphics2D 클래스를 사용하여 워터마크를 그릴 수 있습니다. 이미지 워터마크나 텍스트 워터마크를 추가할 수 있습니다.

    Java 플랫폼은 2D 이미지 드로잉을 구현하기 위한 Java 2D API 클래스 라이브러리를 제공합니다. 이 소프트웨어는 다양한 이미지, 글꼴 및 색상 관리 형식을 지원하며 알파 블렌딩, 깊이 버퍼 등과 같은 많은 고급 기능을 제공합니다.

    Java 2D API 소개

    1. 그래픽 그리기를 위한 객체 생성

    Graphics2D 클래스를 사용하여 그래픽 그리기를 위한 객체를 생성합니다. Graphics 클래스의 하위 클래스인 Graphics2D 객체를 확장하면 더 많은 그리기 기능을 얻을 수 있습니다.

    // 创建一个大小为 800x600 像素的空白图像
    BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
    // 递给 Graphics2D 对象以进行绘制操作
    Graphics2D g2d = image.createGraphics();

    2. 기본 그래픽 그리기

    Java 2D API는 선분, 직사각형, 타원, 호 등 다양한 기본 2D 그래픽 그리기를 지원합니다.

    // 绘制一条线段
    g2d.drawLine(100, 100, 200, 200);
    // 绘制一个矩形
    g2d.drawRect(300, 100, 100, 50);
    // 绘制一个椭圆
    g2d.drawOval(500, 100, 100, 150);
    // 绘制一个弧形
    g2d.drawArc(100, 300, 100, 100, 0, 90);

    3 텍스트 그리기를 사용할 수 있습니다. 이미지에 문자열 텍스트를 그리는 Graphics2D 객체 drawString() 메서드

    // 将字符串 "Hello, Java 2D!" 绘制在坐标 (200, 400) 处
    g2d.drawString("Hello, Java 2D!", 200, 400);

    4. 이미지 그리기

    JPEG, PNG, GIF 등 다양한 형식의 이미지 로드 및 그리기를 지원합니다. ImageIO 클래스를 사용하여 이미지 파일을 로드하고 Graphics2D 객체의 drawImage() 메서드를 사용하여 이미지에 그릴 수도 있습니다.

    // 从指定的文件路径加载一张图片,并将其绘制在图像的左上角
    BufferedImage image = ImageIO.read(new File("image.jpg"));
    g2d.drawImage(image, 0, 0, null);

    5. 그리기 속성 설정

    Graphics2D 개체의 set 메서드를 사용하여 색상, 글꼴, 선 너비 등 다양한 그리기 속성을 설정할 수 있습니다.

    // 设置绘制颜色为红色
    g2d.setColor(Color.RED);
    // 设置字体为 Arial,大小为 24
    g2d.setFont(new Font("Arial", Font.PLAIN, 24));
    // 设置线宽为 3 像素
    g2d.setStroke(new BasicStroke(3));

    텍스트 워터마크 그리기

    그림에 텍스트 워터마크 추가 단계는 다음과 같습니다.

    ImageIO 클래스를 사용하여 워터마크가 필요한 그림을 로드합니다.
    • BufferedImage의 사용자 정의 이미지 개체를 만듭니다. 그리고 Graphics2D 개체를 사용하여 개체에 원본 이미지를 그립니다
    • 글꼴 개체를 만들고 글꼴, 색상, 투명도 및 기타 속성을 설정합니다
    • Graphics2D 개체의 drawString() 메서드를 사용하여 문자열을 그립니다. 워터마크를 추가해야 합니다
    • ImageIO 클래스를 사용하여 수정된 이미지를 지정된 디렉터리에 저장합니다
    •     public static void addWatermark(File input, File out, String text, int fontSize) {
              // 读取原图片
              BufferedImage image = null;
              try {
                  image = ImageIO.read(input);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              // 获取图片的宽度和高度
              int width = image.getWidth();
              int height = image.getHeight();
              // 创建一个图片缓存对象
              BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
              // 获取图片的画笔
              Graphics2D g = newImage.createGraphics();
              // 将原图片绘制到缓存图片上
              g.drawImage(image, 0, 0, width, height, null);
              // 创建字体对象
              Font font = new Font("微软雅黑", Font.BOLD, fontSize);
              // 创建字体渲染上下文
              FontRenderContext frc = new FontRenderContext(null, true, true);
              // 计算字符串的宽度和高度
              Rectangle2D bounds = font.getStringBounds(text, frc);
              // 字符宽度
              int strWidth = (int) bounds.getWidth();
              // 字符高度
              int strHeight = (int) bounds.getHeight();
              // 设置水印的字体样式
              g.setFont(font);
              // 设置水印的颜色
              g.setColor(Color.red);
              // 设置水印的位置 根据需要再自行调整宽度、高度
              g.drawString(text, width - strWidth - 10, height - strHeight + 15);
              // 释放图形上下文使用的系统资源
              g.dispose();
              // 保存带水印的图片
              try {
                  ImageIO.write(newImage, "png", out);
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          public static void main(String[] args) {
              File input = new File("D://test.png");
              File out = new File("D://watermark.png");
              // 水印文本内容,中文转Unicode
              String text = "\u6dfb\u52a0\u6c34\u5370";
              addWatermark(input, out, text, 20);
          }

      그림 워터마크 그리기
    그림에 그림 워터마크 추가 단계는 다음과 같습니다.

    ImageIO 클래스를 사용하여 워터마크가 필요한 그림을 로드합니다.
    • BufferedImage의 사용자 정의 이미지 객체를 생성하고 Graphics2D 객체를 사용하여 객체에 원본 이미지를 그립니다.
    • ImageIO 클래스를 사용하여 워터마크 이미지, 투명도 등의 속성 설정
    • 워터마크 이미지 그리기 및 관련 리소스 공개
    • ImageIO 클래스를 사용하여 수정된 이미지를 지정된 디렉터리에 저장
    •     public static void addWatermark(File input, File out, File watermarkImage) {
              // 读取添加水印的图片
              BufferedImage image = null;
              try {
                  image = ImageIO.read(input);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              // 获取图片的宽度和高度
              int width = image.getWidth();
              int height = image.getHeight();
              // 创建一个图片缓存对象
              BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
              // 获取图片的画笔
              Graphics2D g = newImage.createGraphics();
              // 将原图片绘制到缓存图片上
              g.drawImage(image, 0, 0, width, height, null);
              // 读取水印图片
              BufferedImage watermark = null;
              try {
                  watermark = ImageIO.read(watermarkImage);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              // 获取水印图片的宽度和高度
              int wmWidth = watermark.getWidth();
              int wmHeight = watermark.getHeight();
              // 设置水印图片的透明度
              g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
              // 绘制水印图片
              g.drawImage(watermark, width - wmWidth - 10, height - wmHeight - 10, wmWidth, wmHeight, null);
              // 释放图形上下文使用的系统资源
              g.dispose();
              // 保存带水印的图片
              try {
                  ImageIO.write(newImage, "png", out);
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          public static void main(String[] args) {
              File input = new File("D://test.png");
              File out = new File("D://watermark.png");
              File watermarkImage = new File("D://watermarkImage .png");
              addWatermark(input, out, watermarkImage);
          }

      루프에 텍스트 워터마크 추가
    • 으으으아아아아

    위 내용은 Java에서 텍스트 워터마크 및 그림 워터마크 기능을 추가하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제