JAVA实现图片打马赛克,高斯模糊处理图片

本文介绍了如何使用Java对图片进行打马赛克(在固定坐标遮挡)和高斯模糊处理,包括相关方法的实现,如读取图片、转换为Base64字符串,以及使用Jhlabs库进行模糊处理。
摘要由CSDN通过智能技术生成

JAVA实现图片打马赛克,高斯模糊处理图片


项目中有时需要对敏感图片进行打码或模糊处理,下面有两个方法可以参考

1.对图片固定坐标进行遮挡

public static final String BASE64_HEAD = "data:image/jpg;base64,";
    /**
     * 图片打马赛克,返回base64
     * @param path
     * @return
     */
    public static String imageMosaic(String path) {
        String mosaicPath = "";
        try {
            // 加载图像
            BufferedImage bufferedImage = getImageInfo(path);
            if (bufferedImage == null) {
                return mosaicPath;
            }
            // 创建与输入图像相同大小的新图像
            BufferedImage outputImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
            // 创建画笔
            Graphics graphics = outputImage.getGraphics();
            // 将原始图像绘制到新图像中
            graphics.drawImage(bufferedImage, 0, 0, null);
            // 打码区域左上角x坐标
            int x = 50;
            // 打码区域左上角y坐标
            int y = 50;
            // 打码区域宽度
            int width = 90;
            // 打码区域高度
            int height = 90;
            graphics.setColor(Color.GRAY);
            graphics.fillRect(x, y, width, height);
            // 释放资源
            graphics.dispose();
            mosaicPath = encode(bufferedImageToBytes(outputImage));
        } catch (IOException e) {
            System.out.println("处理图像失败: " + e.getMessage());
        }
        return BASE64_HEAD + mosaicPath;
    }

1.1.BufferedImage bufferedImage = getImageInfo(path);中用到的方法

	/**
     * 获取图片信息
     *
     * @param imageUrl 图片地址
     * @return
     */
    @SneakyThrows
    public static BufferedImage getImageInfo(String imageUrl) {
        InputStream inputStream = readFile(imageUrl);
        if (inputStream == null) {
            return null;
        }
        return ImageIO.read(inputStream);
    }

1.2.InputStream inputStream = readFile(imageUrl);用到的方法

    /**
     * url转InputStream
     *
     * @param fileUrl
     * @return InputStream
     */
    public static InputStream readFile(String fileUrl) {
        if (BasicUtil.isNullOrEmpty(fileUrl)) {
            return null;
        }
        try {
            URL url = new URL(fileUrl);
            HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
            urlCon.setConnectTimeout(6000);
            urlCon.setReadTimeout(6000);
            int code = urlCon.getResponseCode();
            if (code != HttpURLConnection.HTTP_OK) {
                throw new Exception("文件读取失败" + code);
            }
            return urlCon.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

1.3.mosaicPath = encode(bufferedImageToBytes(outputImage));用到的方法

    /**
     * 图片转字符串
     * @param image 图片Buffer
     * @return Base64编码
     */
    public static String encode(byte[] image) {
        Base64.Encoder encoder = Base64.getEncoder();
        return replaceEnter(encoder.encodeToString(image));
    }

    /**
     * 字符替换
     * @param str 字符串
     * @return 替换后的字符串
     */
    public static String replaceEnter(String str) {
        String reg = "[\n-\r]";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(str);
        return m.replaceAll("");
    }

1.4.mosaicPath = encode(bufferedImageToBytes(outputImage));用到的方法

    /**
     * BufferedImage 转 byte[]
     *
     * @param image
     * @return
     * @throws IOException
     */
    public static byte[] bufferedImageToBytes(BufferedImage image) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", outputStream);
        return outputStream.toByteArray();
    }

2.对图片进行模糊处理,里面用到的方法,在上面有写

//maven依赖
<dependency>
    <groupId>com.jhlabs</groupId>
    <artifactId>filters</artifactId>
    <version>2.0.235-1</version>
</dependency>
//gradle依赖
implementation 'com.jhlabs:filters:2.0.235-1'
 	/**
     * 高斯模糊处理图片,返回base64
     * @param url
     * @return
     */
    @SneakyThrows
    public static String fuzzyImage(String url) {
        BufferedImage bufferedImage = getImageInfo(url);
        if (bufferedImage == null) {
            return "";
        }
        GaussianFilter filter = new GaussianFilter();
        //数字越大越模糊
        filter.setRadius(10);
        BufferedImage dstImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);
        filter.filter(bufferedImage, dstImage);
        return BASE64_HEAD + encode(bufferedImageToBytes(dstImage));
    }
    public static void main(String[] args) {
        String path = "https://123456.jpg";
        System.out.println(fuzzyImage(path));
    }

欢迎交流互相学习

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值