Java 9 멀티해상도 이미지 API: 반응형 그래픽 단순화
Java 9에서는 여러 해상도 변형이 있는 이미지를 지원하는 새로운 멀티해상도 이미지 API가 도입되었습니다. 이 API는 서로 다른 해상도의 이미지 세트를 단일 멀티해상도 이미지로 사용할 수 있게 합니다. 멀티해상도 이미지의 주요 연산:
- Image getResolutionVariant(double destImageWidth, double destImageHeight) - 지정된 크기에서 이 논리적 이미지를 가장 잘 표현하는 특정 이미지 변형 가져오기
- List<Image> getResolutionVariants() - 모든 해상도 변형의 읽기 가능한 리스트 가져오기
예제
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.awt.Image;
import java.awt.image.MultiResolutionImage;
import java.awt.image.BaseMultiResolutionImage;
import javax.imageio.ImageIO;
public class Tester {
public static void main(String[] args) throws IOException, MalformedURLException {
List<String> imgUrls = List.of(
"https://www.tutorialspoint.com/java9/images/logo.png",
"https://www.tutorialspoint.com/java9/images/mini_logo.png",
"https://www.tutorialspoint.com/java9/images/large_logo.png");
List<Image> images = new ArrayList<Image>();
for (String url : imgUrls) {
images.add(ImageIO.read(new URL(url)));
}
// 모든 이미지를 하나의 멀티해상도 이미지로 읽기
MultiResolutionImage multiResolutionImage = new BaseMultiResolutionImage(images.toArray(new Image[0]));
// 모든 이미지 변형 가져오기
List<Image> variants = multiResolutionImage.getResolutionVariants();
System.out.println("총 이미지 수: " + variants.size());
for (Image img : variants) {
System.out.println(img);
}
// 각 지정된 크기에 대한 해상도별 이미지 변형 가져오기
Image variant1 = multiResolutionImage.getResolutionVariant(156, 45);
System.out.printf("\n대상[%d,%d] 이미지: [%d,%d]", 156, 45, variant1.getWidth(null), variant1.getHeight(null));
Image variant2 = multiResolutionImage.getResolutionVariant(311, 89);
System.out.printf("\n대상[%d,%d] 이미지: [%d,%d]", 311, 89, variant2.getWidth(null), variant2.getHeight(null));
Image variant3 = multiResolutionImage.getResolutionVariant(622, 178);
System.out.printf("\n대상[%d,%d] 이미지: [%d,%d]", 622, 178, variant3.getWidth(null), variant3.getHeight(null));
Image variant4 = multiResolutionImage.getResolutionVariant(300, 300);
System.out.printf("\n대상[%d,%d] 이미지: [%d,%d]", 300, 300, variant4.getWidth(null), variant4.getHeight(null));
}
}
출력
총 이미지 수: 3
BufferedImage@7ce6a65d: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =311 height = 89 #numDataElements 4 dataOff[0] = 3
BufferedImage@4c762604: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =156 height = 45 #numDataElements 4 dataOff[0] = 3
BufferedImage@2641e737: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space =java.awt.color.ICC_ColorSpace@548ad73b transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width =622 height = 178 #numDataElements 4 dataOff[0] = 3
대상[156,45] 이미지: [311,89]
대상[311,89] 이미지: [311,89]
대상[622,178] 이미지: [622,178]
대상[300,300] 이미지: [622,178]