사진에 워터마크를 추가하는 주된 목적은 사진의 저작권을 보호하여 허가받지 않은 사람이 사진을 사용하거나 유포하는 것을 방지하는 것입니다. 이미지에 워터마크를 추가하는 것은 일반적인 이미지 처리 기술입니다. Java JDK와 함께 제공되는 Graphics2D 클래스를 사용하여 워터마크를 그릴 수 있습니다. 이미지 워터마크나 텍스트 워터마크를 추가할 수 있습니다.
Java 플랫폼은 2D 이미지 드로잉을 구현하기 위한 Java 2D API 클래스 라이브러리를 제공합니다. 이 소프트웨어는 다양한 이미지, 글꼴 및 색상 관리 형식을 지원하며 알파 블렌딩, 깊이 버퍼 등과 같은 많은 고급 기능을 제공합니다.
Graphics2D 클래스를 사용하여 그래픽 그리기를 위한 객체를 생성합니다. Graphics 클래스의 하위 클래스인 Graphics2D 객체를 확장하면 더 많은 그리기 기능을 얻을 수 있습니다.
// 创建一个大小为 800x600 像素的空白图像 BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB); // 递给 Graphics2D 对象以进行绘制操作 Graphics2D g2d = image.createGraphics();
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);
// 将字符串 "Hello, Java 2D!" 绘制在坐标 (200, 400) 处 g2d.drawString("Hello, Java 2D!", 200, 400);로그인 후 복사4. 이미지 그리기
// 从指定的文件路径加载一张图片,并将其绘制在图像的左上角 BufferedImage image = ImageIO.read(new File("image.jpg")); g2d.drawImage(image, 0, 0, null);로그인 후 복사5. 그리기 속성 설정
그림에 텍스트 워터마크 추가 단계는 다음과 같습니다. ImageIO 클래스를 사용하여 워터마크가 필요한 그림을 로드합니다.// 设置绘制颜色为红色 g2d.setColor(Color.RED); // 设置字体为 Arial,大小为 24 g2d.setFont(new Font("Arial", Font.PLAIN, 24)); // 设置线宽为 3 像素 g2d.setStroke(new BasicStroke(3));로그인 후 복사텍스트 워터마크 그리기
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); }
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!