`

java 文字水印平铺

 
阅读更多
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;




public final class ImageUtils {

    
    private static OutputStream output;

	public static void main(String[] args) throws IOException {
		BufferedImage bufferedImage = ImageIO.read(new File("C:/Users/leters/Desktop/0823dd54564e9258a03481d59d82d158ccbf4e8c.jpg"));
    	watermark(bufferedImage,"haha");
        File newFile = new File("C:/Users/leters/Desktop/WatermarkedImage.jpg");
        ImageIO.write(bufferedImage, "jpg", newFile);
    }
    
    private static void watermark(BufferedImage original, String watermarkText) {
        // create graphics context and enable anti-aliasing
        Graphics2D g2d = original.createGraphics();
        g2d.scale(1, 1);
        g2d.addRenderingHints(
                new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                                   RenderingHints.VALUE_ANTIALIAS_ON));
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                             RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        // create watermark text shape for rendering
        Font font = new Font(Font.DIALOG_INPUT, Font.ITALIC , 28);
        GlyphVector fontGV = font.createGlyphVector(g2d.getFontRenderContext(), watermarkText);
        Rectangle size = fontGV.getPixelBounds(g2d.getFontRenderContext(), 8, 8);
        Shape textShape = fontGV.getOutline();
        double textWidth = size.getWidth();
        double textHeight = size.getHeight();
        AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI / 4d);
        Shape rotatedText = rotate45.createTransformedShape(textShape);

        // use a gradient that repeats 4 times
        g2d.setPaint(new GradientPaint(0, 0,
                            new Color(0f, 0f, 0f, 0.1f),
                            original.getWidth() / 2, original.getHeight() / 2,
                            new Color(1f, 1f, 1f, 0.1f)));
        g2d.setStroke(new BasicStroke(0.5f));

        // step in y direction is calc'ed using pythagoras + 5 pixel padding
        double yStep = Math.sqrt(textWidth * textWidth / 2) + 5;

        // step over image rendering watermark text
        for (double x = -textHeight * 3; x < original.getWidth(); x += (textHeight * 3)) {
            double y = -yStep;
            for (; y < original.getHeight(); y += yStep) {
                g2d.draw(rotatedText);
                g2d.fill(rotatedText);
                g2d.translate(0, yStep);
            }
            g2d.translate(textHeight * 3, -(y + yStep));
        }

    }
    
} 

 

分享到:
评论

相关推荐

    使用JS给HTML添加文字水印.html

    使用JS语言,给整个页面添加一个文字水印,这水印不影响页面结构,不影响其他元素点击,会根据页面大小缩放。已经封装为了函数,到手即用。

    java图片加水印(适应铺满)

    开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我

    java为多种文档(word ppt pdf excel)添加文本水印

    在Java开发中,有时我们需要对各种类型的文档进行保护或标识,这时添加文本水印是一种有效的方法。本教程将详细介绍如何使用Free Spire.Office for Java库为Word、PPT和PDF文档添加文本水印,以及如何利用Apache POI...

    Java通过POI和JXL给Excel动态添加水印

    ### Java通过POI和JXL给Excel动态添加水印 #### 概述 在实际工作中,经常需要对敏感或重要的Excel文件进行保护措施,比如添加水印。这不仅可以增加文档的专业性,还可以作为版权保护的一种手段。本文将详细介绍...

    html5 canvas实现给图片添加平铺水印

    在本例中,我们使用Canvas来实现在图片上添加平铺水印的功能。这个需求通常用于保护版权或者增加品牌标识。下面将详细解释实现这个功能的关键步骤和涉及的Canvas API。 1. **初始化Image对象**: `var img = new ...

    itext5生成PDF(含水印文字及图片)

    itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。

    缩略图水印组件3.0Demo

    文字水印、Logo水印、文字水印阴影、文字水印描边、浮雕文字、雕刻文字、立体文字、水印平铺、水印透明度、图片裁剪、马赛克处理、图像对比度、图像亮度、图像颜色调整。 ImageWaterMark3.0缩略图水印组件注册方式...

    php扩展imagick打文字水印、图片水印、裁剪、缩略图工具类

    比GD库更强大的imagick php扩展,运行效率实现效率更快

    如何用java给图片添加图片水印(透明度、旋转、居中)?

    最近在做一个食品溯源项目,需要对一些图片加上水印。 注释都在代码里了,有啥想法可以在评论区交流(๑•ᴗ•๑)~ // 水印透明度 private static float alpha = 0.5f; /** * 给图片添加水印图片、可设置水印图片...

    Winform 全屏水印

    【Winform全屏水印】是一种在Windows窗体应用程序(Winform)中实现的技术,用于在屏幕的全屏模式下添加具有透明度的水印效果。这种技术常用于软件开发中,以保护知识产权或者为用户提供视觉提示。在本文中,我们将...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    总结来说,IText是Java中一个强大且灵活的PDF生成库,通过它可以轻松地创建包含文字、图片和表格的PDF文档。通过理解并实践提供的Demo,你将能够熟练地运用IText进行PDF的生成工作。记住,持续学习和更新库的版本以...

    手摸手教你用canvas实现给图片添加平铺水印的实现

    最近项目中遇到一个需求,需要把一张图片加上平铺的水印 类似这样的效果     首先想到的是用canvas完成这种功能,因为我之前也没有接触过canvas,所以做这个功能的时候,就是一步一步的摸索中学习,过程还是挺...

    图片批量加水印工具,可自由设置水印

    可自由选择添加文字水印、图片水印等格式,水印的大小、位置、旋转、透明度等都可自由设置,也可以将水印平铺于图片之上,更具有特色的是设置好的水印可保存,方便下次打开后即用,另外本工具还内置滤镜功能,也可以...

    背景图片平铺

    在Android中,可以通过Java代码来实现背景图片的平铺。一种常见的做法是利用`BitmapDrawable`类,并通过设置其`setTileModeXY()`方法来指定平铺模式。例如: ```java Bitmap bitmap = BitmapFactory.decodeResource...

    java 纹理填充特效源码

    在Java中,`java.awt.Graphics2D`类提供了强大的功能,可以实现各种复杂的纹理填充效果,包括但不限于简单的平铺、旋转、缩放、透明度控制等。此外,还可以结合Java的多线程和动画框架,创建动态的纹理填充特效,如...

    Java排列组合算法

    本文将深入探讨Java中实现排列组合算法的方法,帮助开发者更好地理解和运用这些概念。 排列是有序的选择,而组合是无序的选择。在Java中,我们可以使用递归、回溯法或者迭代的方式来实现这两种算法。下面我们将详细...

    易语言平铺窗口实例

    易语言平铺窗口实例源码,平铺窗口实例,窗口平铺,GetClassName,API_SetWindowPos,API_寻找子窗口,API_取屏幕句柄,API_取窗口标题,API_SystemParametersInfo,API_判断窗口最小化,API_判断窗口最大化,API_ShowWindow

    窗口水平平铺、垂直平铺、重叠

    标题中的"窗口水平平铺、垂直平铺、重叠"是指在计算机操作系统中,如何管理和布局窗口的三种常见方式。这些功能通常出现在窗口管理器或桌面环境中,允许用户以不同的方式排列打开的应用程序窗口,以优化屏幕空间的...

Global site tag (gtag.js) - Google Analytics