首页>>后端>>java->Java也可以非常简单的实现图片灰度化

Java也可以非常简单的实现图片灰度化

时间:2023-12-02 本站 点击:0

本文通过一个简单的实例,演示如何使用java来实现图片灰度化处理,主要借助下面两种策略来处理颜色

灰度化公式

avgColor=red*0.299f+green*0.587f+blue*0.114f

均值方式

avgColor=(red+green+blue)/3.0f

基于上面两种方式,我们要实现一个图片灰度化的处理,无非就是获取图片的每个像素点的颜色,然后计算avgColor,再用新的颜色填充即可

一个基础的实现演示如下

privateColoravg1(intred,intgreen,intblue){intavg=Math.round((red*0.299f+green*0.587f+blue*0.114f));returnnewColor(avg,avg,avg);}privateColoravg2(intred,intgreen,intblue){intavg=Math.round((red+green+blue)/3);returnnewColor(avg,avg,avg);}@TestpublicvoidtestRender()throwsIOException{Stringfile="http://i0.download.fd.52shubiao.com/t_960x600/g1/M00/10/17/oYYBAFWvR5-IeXHuAAd5kPb8eSgAACm0QF50xIAB3mo414.jpg";//从网络上下载图片BufferedImageimg=ImageIO.read(FileReadUtil.getStreamByFileName(file));intw=img.getWidth(),h=img.getHeight();//创建新的灰度图片画板BufferedImagegray=newBufferedImage(w,h,img.getType());Graphics2Dg2d=gray.createGraphics();g2d.setColor(null);g2d.fillRect(0,0,w,h);for(intx=0;x<w;x++){for(inty=0;y<h;y++){//针对像素点的颜色灰度化之后,重新绘制intcolor=img.getRGB(x,y);ColorgrayColor=avg1((color&0xff0000)>>16,(color&0xff00)>>8,color&0x0000ff);g2d.setColor(grayColor);g2d.fillRect(x,y,1,1);}}g2d.dispose();System.out.printf("渲染完成");}

生成原图与灰度图的对比如下

注意上面的实现,其中加载网络图片的具体实现,之前的博文有介绍,有兴趣的小伙伴可以参考: 封装一个根据路径获取文件资源的工具类

此外介绍一个更好用的姿势,直接使用开源项目 https://github.com/liuyueyi/quick-media 来实现灰度处理

使用这个项目的 image-plugins 之后,生成一个灰度图就很简单了

@TestpublicvoidtestImgGrayAlg(){Stringimg="https://c-ssl.duitang.com/uploads/item/201809/16/20180916175034_Gr2hk.thumb.1000_0.jpeg";BufferedImageout=ImgPixelWrapper.build().setSourceImg(img).setPixelType(PixelStyleEnum.GRAY_ALG).build().asBufferedImg();System.out.println(out);}

注意这个ImgPixelWrapper封装类,处理基础的灰度处理之外,还支持生成字符图,图片像素化(如马赛克...)

至于quick-media这个项目就更有意思了,java侧若想生成酷炫的二维码,选择它绝对不会让你失望;有兴趣的小伙伴可以瞅一瞅

公众号:一灰灰blog


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/10426.html