Java 替换图片背景图为透明

devtools/2025/3/14 23:28:31/

通过java代码将一个表情包的背景替换为空白或者透明

以下代码都是通过 ai生成的,已测试好用。

java">import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**/*** @Author xiaoli* @Date 2025/2/24 10:12* @Version 1.0*/
public class Image {public static void main(String[] args) {// 使用示例replaceBackground(new File("C:\\Users\\Lee\\Desktop\\哈士奇.png"),new File("C:\\Users\\Lee\\Desktop\\哈士奇透明.png"),true,    // true表示透明,false表示白色50       // 颜色阈值(0-255));}/*** 替换图片背景* @param inputFile  输入图片文件* @param outputFile 输出图片文件(建议PNG格式)* @param toTransparent true=替换为透明,false=替换为白色* @param colorThreshold 颜色识别阈值(小于该值视为黑色)*/public static void replaceBackground(File inputFile, File outputFile,boolean toTransparent, int colorThreshold) {try {// 读取原始图片BufferedImage originalImage = ImageIO.read(inputFile);// 创建支持透明的新图片BufferedImage newImage = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);// 遍历每个像素for (int y = 0; y < originalImage.getHeight(); y++) {for (int x = 0; x < originalImage.getWidth(); x++) {int pixel = originalImage.getRGB(x, y);// 提取RGB颜色分量int red = (pixel >> 16) & 0xFF;int green = (pixel >> 8) & 0xFF;int blue = pixel & 0xFF;// 判断是否为背景色(黑色或接近黑色)if (red <= colorThreshold&& green <= colorThreshold&& blue <= colorThreshold) {if (toTransparent) {// 设置为透明newImage.setRGB(x, y, 0x00FFFFFF);} else {// 设置为白色(不透明)newImage.setRGB(x, y, 0xFFFFFFFF);}} else {// 保留原始像素(带透明度)newImage.setRGB(x, y, pixel);}}}// 保存处理后的图片(建议使用PNG格式保持透明度)ImageIO.write(newImage, "PNG", outputFile);} catch (IOException e) {e.printStackTrace();}}
}

http://www.ppmy.cn/devtools/167141.html

相关文章

算法精讲 | 树(二):BFS层序遍历の魔法——像水波纹一样扫描整棵树

&#x1f3af; 算法精讲 | 树&#xff08;二&#xff09;&#xff1a;BFS层序遍历の魔法——像水波纹一样扫描整棵树 &#x1f4c5; 2025/03/11 || 推荐阅读时间 12分钟 &#x1f31f; 开篇故事 小明用DFS解二叉树的右视图总超时&#xff0c;直到他发现BFS层序遍历就像超市结账…

mysql的MGR

3.MGR(MySQL Group Replication) MySQL组复制是Mysql5.7推出的高可用方案&#xff0c;具备以下特性&#xff1a; 一致性高&#xff1a;数据复制基于paxos分布式公式算法&#xff0c;保证多个节点的一致性 容错性高&#xff1a;只要不是超过一半的节点宕机&#xff0c;就可以继续…

机器学习之正则化

在机器学习领域&#xff0c;模型的性能至关重要&#xff0c;而过拟合问题常常阻碍模型在实际应用中的表现。正则化技术应运而生&#xff0c;成为解决这一难题的有力武器。它主要分为参数正则化和经验正则化两大类别&#xff0c;核心目的在于遵循奥卡姆剃刀定律&#xff0c;使模…

大一新生备战蓝桥杯c/c++B组——2024年省赛真题解题+心得分享

一&#xff0c;握手问题 这个题用点像小学奥数&#xff0c;直接手算就行 答案&#xff1a;1204 二&#xff0c;小球反弹 这个题思路简单&#xff0c;但是运行会显示超时。在思考思考&#xff0c;后续补代码。 三&#xff0c;好数 思路一&#xff1a; #include <iostream&…

ChromeOS 133 版本更新

ChromeOS 133 版本更新 1. 增强托管用户的 Office 文件处理功能 从 ChromeOS 133 开始&#xff0c;托管用户 现在可以 无缝打开和编辑 Microsoft Office 文件&#xff08;Word、PowerPoint、Excel&#xff09;&#xff0c;无论他们使用的是 Microsoft 365&#xff08;Office …

踩坑故障实录 自学软硬件工程师第750天

见字如面&#xff0c; 这里是AIGC创意人_竹相左边 我很喜欢 《流浪地球 2》中 &#xff0c;马兆&#xff1a;没有硬件支撑&#xff0c;你破解个屁。 --- 故障描述 昨天在服务器ess当中部署自己的网页计时器。代码都交给通义灵码。给的代码我并不能全部看懂。 今天我想继续…

Java Socket通信基础及拆包粘包问题模拟(上)

一、Socket通信基础概念 1.1 什么是Socket&#xff1f; Socket&#xff08;套接字&#xff09;是计算机网络中不同主机间进程进行双向通信的端点&#xff0c;本质是操作系统提供的进程间通信机制。它封装了TCP/IP协议栈的复杂操作&#xff0c;为应用程序提供了标准API。 1.2…

Redis 缓存穿透、缓存击穿与缓存雪崩详解:问题、解决方案与最佳实践

目录 引言 1. 缓存穿透 1.1 什么是缓存穿透&#xff1f; 示例&#xff1a; 1.2 缓存穿透的原因 1.3 缓存穿透的解决方案 1.3.1 缓存空对象 1.3.2 布隆过滤器&#xff08;Bloom Filter&#xff09; 1.3.3 参数校验 2. 缓存击穿 2.1 什么是缓存击穿&#xff1f; 示例&…