java – 灰显一个BufferedImage
发布时间:2020-12-15 04:32:57 所属栏目:Java 来源:网络整理
导读:我试图将Buffered Image变灰(不将其转换为灰度,只需在顶部添加灰色).现在,我通过使用另一个图像,使其半透明,然后将其覆盖在我的原始图像上来做到这一点.这是我现在的代码: package com.mypkg;import java.awt.AlphaComposite;import java.awt.Graphics2D;im
我试图将Buffered
Image变灰(不将其转换为灰度,只需在顶部添加灰色).现在,我通过使用另一个图像,使其半透明,然后将其覆盖在我的原始图像上来做到这一点.这是我现在的代码:
package com.mypkg; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.net.URL; import javax.imageio.ImageIO; import org.imgscalr.Scalr; public class Overlay { public static void main(String args[]){ URL url = null; try{ //The gray image used for overlay url = new URL("https://hoursofidleness.files.wordpress.com/2012/06/gray-card.jpg"); BufferedImage img1 = ImageIO.read(url); //The original image which I want to gray out url = new URL("http://www.staywallpaper.com/wp-content/uploads/2016/01/Colorful-Wallpaper-HD-pictures-STAY015.jpg"); BufferedImage img2 = ImageIO.read(url); BufferedImage reImg2 = Scalr.resize(img2,Scalr.Method.BALANCED,Scalr.Mode.FIT_EXACT,150,150); //Make the gray image,which is used as the overlay,translucent BufferedImage transparent = new BufferedImage(img1.getWidth(),img1.getHeight(),BufferedImage.TRANSLUCENT); Graphics2D g2d = transparent.createGraphics(); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,(float) 0.50)); g2d.drawImage(img1,null,0); g2d.dispose(); BufferedImage reImg1 = Scalr.resize(transparent,150); //Merge both images BufferedImage result = new BufferedImage(150,BufferedImage.TYPE_INT_ARGB); Graphics2D g = result.createGraphics(); g.drawImage(reImg2,null); g.drawImage(reImg1,null); g.dispose(); ImageIO.write(result,"png",new File("/result.png")); } catch(Exception e){ e.printStackTrace(); } } } 有没有其他方法可以实现这一点,而无需使用额外的图像进行叠加?我可以在原始图像上添加灰色色调吗?我在其他帖子上看过很多建议,但都没有. 谢谢. 解决方法
你的方法基本上做了什么:
>加载灰色图像,其中所有像素具有相同的灰色. 首先,没有必要创建透明图像.您可以直接在真实图像上使用合成绘图. 其次,完全灰色的图像与普通矩形没有区别,Graphics2D类有一个fillRect方法绘制一个填充的矩形,可能比绘制图像快很多. 因此,在将原始图像加载并缩放到reImg2之后,您可以使用: Graphics2D g2d = reImg2.createGraphics(); g2d.setColor(new Color(20,20,128)); g2d.fillRect(0,reImg2.getWidth(),reImg2.getHeight()); g2d.dispose(); 就是这样,现在reImg2变暗,你可以把它写到你的文件中.使用这些值 – 将20s更改为较低的值以获得较深的灰色或较高的值(最多255)以获得较浅的灰度.对于灰色更多的图像,将128(50%alpha)更改为更高的值,或者为灰度较少的图像更改较低的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |