라이브러리

image 메타정보 및 색상 추출(rgb, cmyk)

탄생 2021. 12. 24. 12:05

java에서 이미지 메타 정보를 추출할 경우 rgb와 cmyk의 포멧이 다를 경우 지원하지 않는 타입(Unsupported Image Type) 에러가 발생한다.
rgb와  cmyk의 read는의 경우 다르게 구현하여야 한다.

● 이미지 포멧 RGB 이미지 메타 추출

try {
	String imageUrl = "http://RGBimageURL";
	imageUrl = UriUtils.encodePath(imageUrl, Charset.forName("utf-8"));
	InputStream input = new URL(imageUrl).openStream();
	BufferedImage image = ImageIO.read(input);
	int width = image.getWidth();
	int height = image.getHeight();

	int clr = image.getRGB(0, 0);
	int red = (clr & 0x00ff0000) >> 16;
	int green = (clr & 0x0000ff00) >> 8;
	int blue = clr & 0x000000ff;
	Color c = new Color(red, green, blue);
	String backgroundColor = "#" + String.format("%06x", c.getRGB() & 0x00ffffff);
	
	System.out.println(width + " " + height);
	System.out.println("color : " + backgroundColor);
} catch (Exception e) {
	e.printStackTrace();
}

● 이미지 포멧 CMYK 이미지 메타 추출

// Create a new RGB image
BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
cmyk를 rgb(TYPE_4BYTE_ABGR) 형태로 변환해 주는 것입니다.
http://cris.joongbu.ac.kr/course/java/api/java/awt/image/BufferedImage.html

try {
	String imageUrl = "http://CMYKImageUrl";
	imageUrl = UriUtils.encodePath(imageUrl, Charset.forName("utf-8"));
	InputStream input = new URL(imageUrl).openStream();

	BufferedInputStream in=new BufferedInputStream(input);
	final ImageInputStream stream=ImageIO.createImageInputStream(in);
	final Iterator readers=ImageIO.getImageReaders(stream);
	final ImageReader reader=(ImageReader)readers.next();
	reader.setInput(stream,true);

	Raster raster = reader.readRaster(0, null);
	BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(),
	BufferedImage.TYPE_4BYTE_ABGR);
	bi.getRaster().setRect(raster);
	System.out.println(bi.getWidth() + " " + bi.getHeight());

	int clr = bi.getRGB(0, 0);
	int red = (clr & 0x00ff0000) >> 16;
	int green = (clr & 0x0000ff00) >> 8;
	int blue = clr & 0x000000ff;
	Color c = new Color(red, green, blue);
	String backgroundColor = "#" + String.format("%06x", c.getRGB() & 0x00ffffff);
	System.out.println("color : " + backgroundColor);
} catch (Exception e) {
	e.printStackTrace();
}

참고 URL
https://whitecold89.tistory.com/17