我试图将BufferedImage变灰(不将其转换为灰度,只需在顶部添加灰色).现在,我通过使用另一个图像,使其半透明,然后将其覆盖在我的原始图像上来做到这一点.这是我现在的代码:
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, 0);
g2d.dispose();
BufferedImage reImg1 = Scalr.resize(transparent, Scalr.Method.BALANCED, Scalr.Mode.FIT_EXACT, 150, 150);
//Merge both images
BufferedImage result = new BufferedImage(150, 150, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = result.createGraphics();
g.drawImage(reImg2, 0, 0, null);
g.drawImage(reImg1, 0, 0, null);
g.dispose();
ImageIO.write(result,"png",new File("/result.png"));
} catch(Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以实现这一点,而无需使用额外的图像进行叠加?我可以在原始图像上添加灰色色调吗?我在其他帖子上看过很多建议,但都没有.
谢谢.
你的方法基本上做了什么:
首先,没有必要创建transparent
图像.您可以直接在真实图像上使用合成绘图.
其次,完全灰色的图像与普通矩形没有区别,并且Graphics2D
该类具有fillRect
绘制填充矩形的方法,可能比绘制图像快很多.
因此,在加载并缩放原始图像后reImg2
,您可以使用:
Graphics2D g2d = reImg2.createGraphics();
g2d.setColor(new Color(20,20,20,128));
g2d.fillRect(0, 0, reImg2.getWidth(), reImg2.getHeight());
g2d.dispose();
Run Code Online (Sandbox Code Playgroud)
就是这样,现在reImg2
变暗了,你可以把它写到你的文件中.使用这些值 - 将20s更改为较低的值以获得较深的灰色或较高的值(最多255)以获得较浅的灰度.对于灰色更多的图像,将128(50%alpha)更改为更高的值,或者为灰度较少的图像更改较低的值.
归档时间: |
|
查看次数: |
600 次 |
最近记录: |