java 图片 变黑_JAVA 压缩图片导致背景变黑

上代码:

/**

* 按照比例缩放

*

* @param sourceFile

* @param targetFile

*/

public void zoom(File sourceFile, File targetFile, int wh,int yh,boolean circular) {

try {

BufferedImage image = ImageIO.read(sourceFile);

BufferedImage newImage = zoom(image, (int) Math.ceil(wh ), (int) Math.ceil(yh));

//去除背景黑底

newImage.getGraphics().fillRect( 0, 0 , wh, yh);

newImage.getGraphics().drawImage(image.getScaledInstance(wh, yh,Image.SCALE_SMOOTH), 0, 0, null);

String formatName = getImageFormatName(sourceFile);

if (formatName == null || formatName.length() == 0) {

return;

}

//设置图片变成圆形

if(circular){

newImage=convertCircular(newImage,wh);

}

ImageIO.write(newImage, formatName, targetFile);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 传入的图像必须是正方形的 才会 圆形 如果是长方形的比例则会变成椭圆的

*

* 图片裁圆

* @return

* @throws IOException

*/

public static BufferedImage convertCircular(BufferedImage bi1,int min) throws IOException {

//BufferedImage bi1 = ImageIO.read(sourceFile);

// 这种是黑色底的

//BufferedImage bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(), BufferedImage.TYPE_INT_RGB);

// 透明底的图片

BufferedImage bi2 = new BufferedImage(min, min, BufferedImage.TYPE_4BYTE_ABGR);

Ellipse2D.Double shape = new Ellipse2D.Double(0, 0,min,min);

Graphics2D g2 = bi2.createGraphics();

g2.setClip(shape);

// 使用 setRenderingHint 设置抗锯齿

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2.drawImage(bi1, 0, 0, null);

// 设置颜色

g2.setBackground(Color.green);

g2.dispose();

return bi2;

}

newImage.getGraphics().fillRect( 0, 0 , wh, yh);

newImage.getGraphics().drawImage(image.getScaledInstance(wh, yh,Image.SCALE_SMOOTH), 0, 0, null);

这两行代码是为了背景去黑底起作用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值