ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hutool操作图片(缩放,加水印)

2022-07-23 18:31:24  阅读:288  来源: 互联网

标签:缩放 Hutool 水印 BufferedImage gf 加水 ImgUtil 图片


一、地址

https://www.hutool.cn/

针对awt中图片处理进行封装,这些封装包括:缩放、裁剪、转为黑白、加水印等操作。

二、缩放图片

近期线上环境CDN过高,排查下来发现图片有点大,在对于图片分辨率不是特别高的场景,显示效果影响不是很大的情况下,可以对返回的图片进行适当缩放,缩放图片不仅减少图片文件大小,也可以减少CDN带宽,

现在提供一张图片的访问路径,需要把这张图片进行缩放,

比如这里有一张图片

https://images.cnblogs.com/cnblogs_com/LiuFqiang/1429011/o_220528033315_star-squashed.jpg

图片大小为1920 x 1080格式的,

if (FileNameUtil.containsInvalid(picUrl)) {
BufferedImage bufferedImage = ImgUtil.read(URLUtil.url(picUrl));
Image scaleImage = ImgUtil.scale(bufferedImage, 0.5f);
File file = FileUtil.file("/Users/liufuqiang/a.jpg");
ImgUtil.write(scaleImage, file);
}

 

 

 ImgUtil.scale()为缩放图片方法,里面重载了几个参数,这里使用的为Image原图像来源流,scale为缩放比例

 

 三、图片添加水印

1、添加文字水印

原图

 

 添加文字水印图片

 

String picUrl = "https://images.cnblogs.com/cnblogs_com/LiuFqiang/1429011/o_220528033315_star-squashed.jpg";
        BufferedImage bufferedImage = ImgUtil.read(URLUtil.url(picUrl));
        ImgUtil.pressText(
                bufferedImage,
                FileUtil.file("/Users/liufuqiang/b.jpg"),
                "博客园-LiuFqiang", Color.WHITE,
                new Font("微软雅黑", Font.BOLD, 40),
                0 ,
                0,
                0.8f
        );

  

 

 可以设置文字水印的字体颜色等,默认添加水印的坐标为图片正中央

2、图片文字水印

 显示在右下方,正常水印会跟随图片大小而调整

public static BufferedImage pressText (BufferedImage srcImage, Image pressImg, String pressText, Color color, Font font,
                                           float alpha) {
        final BufferedImage destImage = srcImage;
        final Graphics2D gf = destImage.createGraphics();
        // 抗锯齿
        gf.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gf.setColor(color);
        gf.setFont(font);
        // 透明度
        gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 在指定坐标绘制水印文字
        FontMetrics metrics = gf.getFontMetrics(font);
        int textLength = metrics.stringWidth(pressText);
        int textHeight = metrics.getAscent() - metrics.getLeading() - metrics.getDescent();
        gf.drawString(pressText, destImage.getWidth() - textLength, destImage.getHeight() - (textHeight / 2));
        gf.dispose();
        int width = destImage.getWidth((ImageObserver) null);
        int height = destImage.getHeight((ImageObserver) null);
        BufferedImage destImage2 = new BufferedImage(width, height, 1);
        Graphics2D g = destImage2.createGraphics();
        g.drawImage(destImage, 0, 0, width, height, (ImageObserver) null);
        int pressImgWidth = pressImg.getWidth((ImageObserver) null);
        int pressImgHeight = pressImg.getHeight((ImageObserver) null);
        int x = (width - pressImgWidth) - textLength - 5;
        int y = (height - pressImgHeight);
        g.setComposite(AlphaComposite.getInstance(10, alpha));
        // 给图片打上图片水印
        g.drawImage(pressImg, x, y, pressImgWidth, pressImgHeight, (ImageObserver) null);
        g.dispose();
        return destImage2;
    }

  方法调用  

BufferedImage bufferedImage1 = pressText(ImgUtil.read(URLUtil.url(picUrl)),
                ImgUtil.read(URLUtil.url("https://www.baidu.com/img/flexible/logo/pc/result@2.png")),
                "博客园-LiuFqiang",
                Color.WHITE,
                new Font("微软雅黑", Font.BOLD, 40),
                1f);
        ImgUtil.write(bufferedImage1, FileUtil.file("/Users/liufuqiang/b.jpg"));

 

标签:缩放,Hutool,水印,BufferedImage,gf,加水,ImgUtil,图片
来源: https://www.cnblogs.com/LiuFqiang/p/16512687.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有