Java如何处理图片保存之后变红色的问题

 更新时间:2023年11月18日 10:05:25   作者:请告诉他  
这篇文章主要介绍了Java如何处理图片保存之后变红色的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

原图如下

上传之后效果如下

马赛克是我打的,别人家的logo,避免广告之嫌,系统审核不过

然而其他图片并不存在这个问题,如

 这张,不存在这样的问题

两张图片不同点在于正常的为jpg,变色的为png

后面经过不同的尝试后发现,透明的PNG图、改alpha通道或四色图等都会引起以上问题

解决办法

有两种,这里分享比较好用的一种,方便快捷,复制粘贴就能用

  // 这里是直接根据url读取图片
    public static BufferedImage getBufferedImage(String  imgUrl) throws MalformedURLException {
        URL url = new URL(imgUrl);
        ImageIcon icon = new ImageIcon(url);
        Image image = icon.getImage();
 
        // 如果是从本地加载,就用这种方式,没亲自测试过
        // Image src=Toolkit.getDefaultToolkit().getImage(filePath);
 
        // This code ensures that all the pixels in the image are loaded
        BufferedImage bimage = null;
        GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
        try {
            int transparency = Transparency.OPAQUE;
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();
            bimage = gc.createCompatibleImage(image.getWidth(null),
                    image.getHeight(null), transparency);
        } catch (HeadlessException e) {
            // The system does not have a screen
        }
        if (bimage == null) {
            // Create a buffered image using the default color model
            int type = BufferedImage.TYPE_INT_RGB;
            bimage = new BufferedImage(image.getWidth(null),
                    image.getHeight(null), type);
        }
        // Copy image to buffered image
        Graphics g = bimage.createGraphics();
        // Paint the image onto the buffered image
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return bimage;
    }

我的是在原代码中,将

 bi = ImageIO.read(inStream);

替换为

bi =  getBufferedImage(inFile.getPath());

具体如下

最终效果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java随机生成验证码的实现示例

    Java随机生成验证码的实现示例

    这篇文章主要介绍Java随机生成验证码的实现方法,文中有相关的实现代码供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • jdk线程池的实现

    jdk线程池的实现

    本文主要介绍了jdk线程池的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • RestTemplate get请求携带headers自动拼接参数方式

    RestTemplate get请求携带headers自动拼接参数方式

    这篇文章主要介绍了RestTemplate get请求携带headers自动拼接参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Jemalloc优化MySQL和Nginx

    Jemalloc优化MySQL和Nginx

    这篇文章主要介绍了Jemalloc优化MySQL和Nginx的相关资料,需要的朋友可以参考下
    2016-01-01
  • java如何给指定类配置单独的日志文件输出

    java如何给指定类配置单独的日志文件输出

    这篇文章主要介绍了java如何给指定类配置单独的日志文件输出问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Spring boot配置绑定和配置属性校验的方式详解

    Spring boot配置绑定和配置属性校验的方式详解

    这篇文章主要介绍了Spring boot配置绑定和配置属性校验,SpringBoot 提供了2 种方式进行配置绑定,即使用 @ConfigurationProperties 注解和使用 @Value 注解,需要的朋友可以参考下
    2022-05-05
  • SpringBoot实现接口幂等性的4种方案

    SpringBoot实现接口幂等性的4种方案

    这篇文章主要介绍了SpringBoot实现接口幂等性的4种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • spring cloud 使用Hystrix 实现断路器进行服务容错保护的方法

    spring cloud 使用Hystrix 实现断路器进行服务容错保护的方法

    本篇文章主要介绍了spring cloud 使用Hystrix 实现断路器进行服务容错保护的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • java处理异常Exception的方法总结

    java处理异常Exception的方法总结

    在Java中处理异常并不是一个简单的事情,不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间,本文为大家整理了java处理异常Exception的一些常用方法,希望对大家有所帮助
    2023-09-09
  • Spring Cloud Gateway 获取请求体(Request Body)的多种方法

    Spring Cloud Gateway 获取请求体(Request Body)的多种方法

    这篇文章主要介绍了Spring Cloud Gateway 获取请求体(Request Body)的多种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论