首页 > 编程语言 >Java 将PNG图片白色背景转为透明背景

Java 将PNG图片白色背景转为透明背景

时间:2023-07-06 18:22:06浏览次数:41  
标签:Java int 背景 BufferedImage color range sourceImage newImage PNG

代码实现

BufferedImage sourceImage = ImageIO.read(imageFile);
int height = sourceImage.getHeight();
int width = sourceImage.getWidth();
BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = newImage.createGraphics();
g2d.drawImage(sourceImage, 0, 0, null);
int alpha = 0;
for (int y = newImage.getMinY(); y < newImage.getHeight(); y++) {
    for (int x = newImage.getMinX(); x < newImage.getWidth(); x++) {
        int rgb = newImage.getRGB(x, y);
        alpha = includeColor(rgb) ? 0 : 255;
        rgb = (alpha << 24) | (rgb & 0X00FFFFFF);
        newImage.setRGB(x, y, rgb);
    }
}
g2d.dispose();
ByteArrayOutputStream imageOutPutStream = new ByteArrayOutputStream();
ImageIO.write(newImage, "png", imageOutPutStream);


/**
 * 判断当前色块是否属于设定值的范围
 * @param color 当前颜色
 * @return false|true
 */
public static boolean includeColor(int color) {
    int red = (color & 0xFF0000) >> 16;
    int green = (color & 0x00FF00) >> 8;
    int blue = (color & 0x0000FF);
    int color_range = 215;
    return (red >= color_range && green >= color_range && blue >= color_range);
}
``

标签:Java,int,背景,BufferedImage,color,range,sourceImage,newImage,PNG
From: https://www.cnblogs.com/IamHzc/p/17532979.html

相关文章

  • Java实现浏览器端大文件分片上传控件
    ​ 核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。* 如何分片;* 如何合成一个文件;* 中断了从哪个分片开始。如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块......
  • java -- 时间
       ......
  • java实现文本转语音(即语音朗读)
    java实现文本转语音(即语音朗读)1.方式一:使用jacob离线语音合成1.下载jacob-1.18.zip链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg提取码:7t1g2.将jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中3.添加需要的依赖<!--https://mvnrepository.com/a......
  • java http大文件断点续传上传问题
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • 报错 Cannot construct instance of `java.time.LocalDate` LocalDateTime
    原因:报错的原因就是导入了JacksonObjectMapper对象映射器,导致不知道怎么将LocalDateTime转换成Json类型的数据了,在没有导入使用JacksonObjectMapper的时候是不会报错的。解决方式:指定LocalDateTime类型的数据如何进行序列化就好了,给实体类中LocalDateTime的属性加上注解就可以了:......
  • java中http请求-okhttp使用连接池优化
    愿历尽千帆,归来仍是少年原因:避免频繁频繁的开关连接。1.Maven添加依赖<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.10.0</version></dependency>2.OkHttpConfiguration配置类......
  • JAVA_DAY_01
    第一天1.jdk针对Java开发员的软件开发工具包。1.5:{自动拆箱和装箱、foreach循环、可变参数}​1.8:{1、Lamdba表达式2、函数式接口3、方法引用和构造引用4、StreamAPI}​java的运行机制,编写定义为.java格式的源代码。​通过javac命令格式调用编译器(JDK)对源代码进行编......
  • java http大文件断点续传上传功能
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • 解决Java 线程池 共享变量的具体操作步骤
    实现Java线程池共享变量的步骤为了实现Java线程池共享变量,我们需要以下步骤:步骤描述步骤一创建一个线程池步骤二创建一个共享变量步骤三在需要共享变量的地方,使用线程池提交任务步骤四在任务中使用共享变量进行操作下面我将详细介绍每一步的操作和所需......
  • 解决Java 线程安全的DateFormat的具体操作步骤
    Java线程安全的DateFormat在多线程的环境下使用Java的SimpleDateFormat类进行日期格式化操作时,可能会遇到线程安全的问题。这篇文章将会介绍为什么SimpleDateFormat不是线程安全的,以及如何解决这个问题。为什么SimpleDateFormat不是线程安全的?SimpleDateFormat是Java中用于格......