栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java生成文本水印

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java生成文本水印

Java生成文本水印,支持半透明背景、文字描边,能根据字体自适应宽高,有需要的小伙伴可根据自身情况调整。看效果~

暂不支持多行文字

微软雅黑

宋体

半透明背景

透明背景(字体有描边)

参考代码

    public BufferedImage genTextWatermark(String text, int size, Color textColor, boolean bgMask, int padding) {

        final Font font = new Font("微软雅黑", Font.BOLD, size);
        FontMetrics fm = FontDesignMetrics.getMetrics(font);
        int stringWidth = fm.stringWidth(text);
        int stringHeight = fm.getHeight();
        int ascent = fm.getAscent();

        int imgWidth = stringWidth;
        int imgHeight = stringHeight;
        if (padding > 0) {
            imgWidth += padding;
            imgHeight += padding;
        }

        BufferedImage bufferedImage = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = bufferedImage.createGraphics();
        if (bgMask) {
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.15F));
            g.setColor(Color.decode("#000000"));
            g.fillRect(0, 0, imgWidth, imgHeight);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0F));
        }

        // 设置对线段的锯齿状边缘处理
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
        g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);

        int offsetX = padding / 2;
        int offsetY = (ascent) + (padding / 2);
        if (bgMask) {
            g.setColor(textColor);
            g.setFont(font);
            g.drawString(text, offsetX, offsetY);
        } else {
            FontRenderContext frc = g.getFontRenderContext();
            TextLayout tl = new TextLayout(text, font, frc);
            Shape sha = tl.getOutline(AffineTransform.getTranslateInstance(offsetX, offsetY));
            //描边色
            g.setColor(Color.decode("#010101"));
            g.draw(sha);
            //字体色
            g.setColor(textColor);
            g.fill(sha);
        }
        g.dispose();

        return bufferedImage;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号