728x90
내가 생각해도 약간 말이 안되게 이리저리 스택오버플로우에서 받아다가 쓴 것 같은 글입니다.
https://blog.naver.com/tommybee/50144474479
이해도 안되고 해서 다시 한 번 만들어 볼까 합니다. 물론 스택오버플로우에 있는 소스 코드를 그대로 가져다 쓰도록 하겠습니다.
package com.tobee.test.image;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.awt.image.RGBImageFilter;
import java.io.*;
import javax.imageio.ImageIO;
public class AddTransparency {
private static BufferedImage imageToBufferedImage(Image image) {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, 0, 0, null);
g2.dispose();
return bufferedImage;
}
public static Image makeColorTransparent(BufferedImage im, final Color color) {
ImageFilter filter = new RGBImageFilter() {
// the color we are looking for... Alpha bits are set to opaque
public int markerRGB = color.getRGB() | 0xFF000000;
public final int filterRGB(int x, int y, int rgb) {
if ((rgb | 0xFF000000) == markerRGB) {
// Mark the alpha bits as zero - transparent
return 0x00FFFFFF & rgb;
} else {
// nothing to do
return rgb;
}
}
};
ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
return Toolkit.getDefaultToolkit().createImage(ip);
}
public static void main(String[] args) throws IOException {
String imagePath = "./images/";
File inFile = new File(imagePath, "1005214200.jpg");
BufferedImage source = ImageIO.read(inFile);
int color = 0xffffff;
Image image2 = makeColorTransparent(source, new Color(color));
BufferedImage transparent = imageToBufferedImage(image2);
File out = new File(imagePath, "trans.PNG");
ImageIO.write(transparent, "PNG", out);
}
}
구글링해서 아무 이미지를 하나 다운로드 받았습니다. 나는 'question' 으로 해서 다음의 이미지를 다운 받았습니다.
위의 이미지는 눈으로 봐도 흰색 부분에 투명도가 더 해 지면 가장 이상적일 것 같네요
그래서 흰색 이미지 픽셀 부분만 투명도를 더해 주도록 합니다.
물론 전체 코드 상에서 다음과 같이 이미 적용 되어 있는 부분이기도 합니다.
int color = 0xffffff;
Image image2 = makeColorTransparent(source, new Color(color));
이렇게 이미지를 변환하게 되면, 다음과 같이 흰색과 흰색 경계의 이미지는 투명도가 적용되지 않는 약간 거친 투명 이미지가 생성 되는 것을 알 수 있습니다.
사람의 눈으로 수작없을 진행 해야 할 정도의 이미지이기는 한데요. 약간의 아이디어가 필요 할 것 같습니다.
이상.
728x90
'프로그래밍' 카테고리의 다른 글
Guice - Google (2) | 2022.08.30 |
---|---|
DisconnectedContext 오류 (0) | 2022.04.28 |
[자바] Argument Parser (0) | 2022.04.10 |
자바에서 enum 사용 (0) | 2022.04.10 |
자바, C++ enum (0) | 2022.04.10 |