版权声明:转载麻烦告知。 https://blog.csdn.net/qq_40064948/article/details/81737845
将图片黑白灰处理需要用到BufferedImage类,在BufferedImage类中,BufferedImage的构造方法new BufferedImage(w,h,x),x参数则是使头像黑白灰处理的重点--BufferedImage.TYPE_BYTE_BINARY。
使用两个循环得到像素点,由于我的图片是圆形的png图像,绘制出来后边角都变成了黑色,在控制台输出rgb参数,发现有很多-1,当像素为透明null时,image.getRGB(i,j)则返回-1,所以我们这里需要将-1排除,否则将会把透明的地方绘制成黑色。
//传入图片路径返回一个BufferedImage类型的黑白灰图像
public static BufferedImage drawBlackHead(String imagePath){
BufferedImage image = null;
BufferedImage grayImage =null;
try {
//根据传入的路径 读取到头像文件
image = ImageIO.read(new File(imagePath));
//头像变灰的重点:技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY );
//用一个两重循环进行像素点赋值
for(int i= 0 ; i < image.getWidth() ; i++){
for(int j = 0 ; j < image.getHeight(); j++){
int rgb = image.getRGB(i,j);
//这里判断rgb是否 == -1,因为当检测到透明图层时,返回值为-1,如果不排除的话话,BufferedImage.TYPE_BYTE_BINARY会将透明图层绘制成黑色
if(rgb != -1){
//将获取的像素点颜色 变为对应灰色
grayImage.setRGB(i, j, rgb);
}
}
}
} catch (IOException e) {
System.out.println("drawBlackHead画灰头像失败");
}
return grayImage;
}