项目中遇到一个需要把背景图改为透明的需求,因为我这里图片可能会比较复杂所以会出现有些背景留着图片没了的问题。所以根据网络上的资源学习了一下我项目可以用的。

package file;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;/*** 描述 The type Tm img.** @author Jack Que* @created 2021 -07-08 10:25:10*/
public class tmImg {/*** 描述 The entry point of application.** @param args the input arguments* @author Jack Que* @created 2021 -07-08 10:25:10*/public static void main(String[] args) {try {
//            changeImgColor("D:\\IEC202105181050.JPG");changeImgColor("D:\\IEC202105181050.JPG");changeImgColor("D:\\201709160000.png");} catch (IOException e) {e.printStackTrace();}}/*** 将背景替换为透明** @param imgBytes the img bytes* @return* @throws IOException the io exception* @author Jack Que* @created 2021 -07-08 10:25:10 Change img color.*/public static void changeImgColor(String path) throws IOException {File file = new File(path);String fileName = file.getName();BufferedImage bi =  ImageIO.read(file);Image image = (Image) bi;//将原图片的二进制转化为ImageIconImageIcon imageIcon = new ImageIcon(image);int width = imageIcon.getIconWidth();int height = imageIcon.getIconHeight();
////图片缓冲流BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D graphics2D = (Graphics2D) bufferedImage.getGraphics();graphics2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());int alpha = 255;//这个背景底色的选择,我这里选择的是比较偏的位置,可以修改位置。背景色选择不知道有没有别的更优的方式(比如先过滤一遍获取颜色次数最多的,但是因为感觉做起来会比较复杂没去实现),如果有可以评论。int RGB=bufferedImage.getRGB(width-1, height-1);for(int i = bufferedImage.getMinX(); i < width; i++) {for(int j = bufferedImage.getMinY(); j < height; j++) {int rgb = bufferedImage.getRGB(i, j);int r = (rgb & 0xff0000) >>16;int g = (rgb & 0xff00) >> 8;int b = (rgb & 0xff);int R = (RGB & 0xff0000) >>16;int G = (RGB & 0xff00) >> 8;int B = (RGB & 0xff);//a为色差范围值,渐变色边缘处理,数值需要具体测试,50左右的效果比较可以int a = 45;if(Math.abs(R-r) < a && Math.abs(G-g) < a && Math.abs(B-b) < a ) {alpha = 0;} else {alpha = 255;}rgb = (alpha << 24)|(rgb & 0x00ffffff);bufferedImage.setRGB(i,j,rgb);}}//        graphics2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());//新建字节输出流,用来存放替换完背景的图片
//        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();String[] split = fileName.split("\\.");fileName = split[0]+"(已转换)."+split[1];ImageIO.write(bufferedImage, "png", new File("D:\\"+fileName));}public static String convertRgbStr(int color) {int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位int blue = (color & 0x0000ff);// 获取color(RGB)中B位return red + "," + green + "," + blue;}
}

JAVA将图片背景色设置为透明相关推荐

  1. Photoshop简单案例(7)——利用对象选择工具将图片背景设置为透明

    目录 一.项目介绍 二.基本流程 三.效果演示 四.拓展 一.项目介绍 工具栏中第四个工具包括三个工具:对象选择工具.快速选择工具和魔棒工具.这三个工具主要用于智能抠图,而本文中的将图片背景设置为透明 ...

  2. 图片处理系列:png图片背景色改为透明

    有时候,设计师的切图背景没有弄彻底,开发中需要背景透明的图片. 在线删除图片背景色 效果如下,xx.png是去除背景后的图片. 为什么不用稿定抠图? 需要账号,麻烦 下载图片张数还受到限制,要付费.

  3. 用ps将图片背景设置为透明

    下载的图片周围或许有一大片背景颜色,如何将之设置成透明呢?方法如下:. 在网页制作中,往往会发生这种事情,当你把辛辛苦苦制作好的图像插到网页中后,会发现这幅图像的背景颜色和网页背景颜色怎么看也不协调. ...

  4. Java将图片处理成背景透明的圆形图片

    /** @author Michael Feng* @date 2017年9月4日*/import java.awt.AlphaComposite; import java.awt.Color; im ...

  5. 如何在WPS 2019中将图片背景设置为透明

    首先,找一些背景色相对比较单一的图片,格式为jpg或png都可以. 如下所示,为网上找的一张汽车图片: 然后,用wps 2019新建word文档,打开,在"插入"选项卡下选择&qu ...

  6. R plot图片背景设置为透明_R语言数据可视化基因名称转换及KEGG/GO富集分析

    01 - 简介 BiocManager是生物信息分析必不可少的R包之一,主要用来分析基因相关的各种问题,但是通常再R上安装这个程序包都挺麻烦的,搜索引擎上有非常多的关于如何安装的,因此这里只给个建议, ...

  7. java将图片背景替换为透明

    /*** 将背景替换为透明* @param imgBytes* @return* @throws IOException*/ public byte[] changeImgColor(byte[] i ...

  8. R plot图片背景设置为透明_一文学会网络分析——Cooccurrence网络图在R中的实现...

    作者:陈亮  单位:中科院微生物所 编者按:在菌群月坛,在军科院听取王军组陈亮博士分享网络分析的经验,不仅使我对网络的背景知识有了更全面的认识,更使我手上一个关于菌根的课题有极大的启示.这么好的知识, ...

  9. 将png图片背景色置为透明

    去除背景成为透明:如果是单纯颜色的背景色,打开图象,选"魔术棒"工具,将容差设为30左右,点背景色,形成选 区.再选"魔术橡皮擦工具",点选区,背景就透明了.再 ...

  10. R plot图片背景设置为透明_R语言绘图:使用主题提高图片的美感

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

最新文章

  1. 什么是OKR?目标管理如何做?
  2. 数据管理、数据治理、数据管控的概念区别和范围是什么?
  3. 为uThreadPool增加线程池等待功能
  4. HBase Java API 创建表时一直卡住
  5. python __init__ __new___Python中的__init__和__new__介绍
  6. c语言解魔方程序,请哪位牛人告诉我怎样用C语言程序复原3阶魔方的
  7. 信息学奥赛一本通 1075:药房管理 | OpenJudge NOI 1.5 23:药房管理
  8. 微信小程序 - 展开收缩列表
  9. Go语言结构体的多字段赋值是并发安全的吗?
  10. sql管理器指定服务器名字,如何修改sql server 服务管理器 服务器名称
  11. L2-015. 互评成绩-PAT团体程序设计天梯赛GPLT
  12. 一款开源Android在线音乐播放器
  13. 常用的DOS功能输入输出
  14. c/c++成长之捷径 C/C++学习资料大全
  15. Unity3D内存释放
  16. (附源码)ssm小米购物网站 毕业设计 261624
  17. 800份h5游戏源码
  18. 如何舒服地在图书馆用ipad入门深度学习【windows jupyter远程】
  19. 利用ISA防火墙发布邮件服务器并部署OWA访问
  20. 下一代半导体表面清洁技术

热门文章

  1. 拳王虚拟项目公社:你最重要的事情是什么?
  2. 服务器阵列卡缓存显示错误,服务器阵列卡(缓存)
  3. 生来只为丈量天空,开普勒的传奇一生
  4. 1000以内的水仙花数有哪些?(3位数的水仙花数有哪些?)
  5. RxJS 6 —— operators
  6. 花都平安保险应该找谁?
  7. 【#9733;】选择好游戏认准这30个特质!
  8. 诺贝尔奖离中国还有多远
  9. 一个未完毕创业项目的思考——创业杂记
  10. 十分钟免费拥有永久网站