Java实现图片去白边小程序

在制作游戏时,大家会遇到一个非常严峻的问题——图片带有白边,将带有白边的图片生成在游戏中时,总会使其显得格格不入,下面为大家提供一个去白边的小程序:

import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 
  
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
  
public class ImageUtil { 
  public static void main(String[] args) { 
    transferAlpha(); 
  } 
  
  public static byte[] transferAlpha() { 
  
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

    //在此处填入需要消去白边的图片的目录
    File file = new File("E:/Project/JAVA  Project/黄金矿工/imgs/小黄金.png"); 
    InputStream is; 
    try { 
      is = new FileInputStream(file); 
      // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); 
      BufferedImage bi = ImageIO.read(is); 
      Image image = (Image) bi; 
      ImageIcon imageIcon = new ImageIcon(image); 
      BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), 
          BufferedImage.TYPE_4BYTE_ABGR); 
      Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); 
      g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); 
      int alpha = 0; 
      for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { 
        for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { 
          int rgb = bufferedImage.getRGB(j2, j1); 
  
          int R = (rgb & 0xff0000) >> 16; 
          int G = (rgb & 0xff00) >> 8; 
          int B = (rgb & 0xff); 
          if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { 
            rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); 
          } 
  
          bufferedImage.setRGB(j2, j1, rgb); 
  
        } 
      } 
  
      g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); 

      //在此处填入去除白边之后图片的生成路径即可
      ImageIO.write(bufferedImage, "png", new File("E:/Project/JAVA  Project/黄金矿工/imgs/小黄金.png"));// 直接输出文件 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } finally { 
  
    } 
    return byteArrayOutputStream.toByteArray(); 
  } 
} 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故梦余生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值