gpt4 book ai didi

java - 使 BufferedImage 变灰

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:23:15 25 4
gpt4 key购买 nike

我正在尝试使 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();
}
}
}

有没有其他方法可以在不使用附加图像进行叠加的情况下实现这一目标?我可以简单地在原始图像上添加灰色调吗?我已经尝试了很多我在其他帖子中看到的建议,但都没有用。

谢谢。

最佳答案

你的方法基本上做了什么:

  • 加载一个灰色图像,其中所有像素都具有相同的灰色。
  • 创建一个新图像。
  • 在该图像上绘制灰色图像,使其半透明。
  • 在要变灰的图像上绘制半透明的灰色图像。

首先,没有必要创建透明 图像。您可以直接在真实图像上使用合成绘图。

其次,完全灰色的图像与普通矩形没有区别,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();

就是这样,现在 reImg2 变暗了,您可以将它写入您的文件。调整值 - 将 20s 更改为较低的值以获得更深的灰色或更高的值(最高 255)以获得更浅的灰色。将 128(50% alpha)更改为更高的值以获得更灰化的图像,或更改为更低的值以获得更不灰化的图像。

关于java - 使 BufferedImage 变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com