PNG, JPEG 및 GIF 파일의 크기를 조정해야합니다. Java를 사용하여이 작업을 수행하려면 어떻게해야합니까?
답변
이미지를로드 한 후 시도해 볼 수 있습니다.
BufferedImage createResizedCopy(Image originalImage,
int scaledWidth, int scaledHeight,
boolean preserveAlpha)
{
System.out.println("resizing...");
int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType);
Graphics2D g = scaledBI.createGraphics();
if (preserveAlpha) {
g.setComposite(AlphaComposite.Src);
}
g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
return scaledBI;
}
답변
FWIW 방금 imgscalr ( Maven central에서 사용 가능) 이라는 Java 용 간단한 이미지 스케일링 라이브러리 (GitHub에서 호스팅되는 Apache 2)를 출시했습니다 .
이 라이브러리는 이미지 스케일링에 대한 몇 가지 다른 접근 방식을 구현하며 (몇 가지 사소한 개선 사항이있는 Chris Campbell의 증분 방식 포함) 요청하면 가장 적합한 방식을 선택하거나 가장 빠르거나 최상의 모습을 제공합니다 ( 요청하십시오).
사용법은 매우 간단하고 정적 메소드입니다. 가장 간단한 사용 사례는 다음과 같습니다.
BufferedImage scaledImage = Scalr.resize(myImage, 200);
모든 작업은 이미지의 원래 비율을 유지하므로이 경우 이미지 크기를 200 픽셀과 200 픽셀의 범위 내에서 이미지 크기를 조정하도록 imgscalr에 요청하면 기본적으로 이미지가 가장 잘 보이고 가장 빠른 방법을 자동으로 선택합니다. 지정되지 않았습니다.
나는 처음에는 이것이 자기 진흥처럼 보인다는 것을 알고 있지만, 나는 똑같은 주제를 인터넷 검색하는 데 상당한 시간을 보냈고 다른 결과 / 접근법 / 생각 / 제안을 계속해서 앉아서 앉아서 결정했습니다. 이미지가 있고 가능한 한 빨리보기 좋거나보기 좋은 이미지를 원한다면 80-85 %의 사용 사례를 다루는 간단한 구현입니다. 작은 이미지에 대한 BICUBIC 보간법으로도 Graphics.drawImage를 수행하면 여전히 가비지처럼 보입니다.
답변
Thumbnailator 는 MIT 라이센스에 따라 유창한 인터페이스를 갖춘 Java 용 오픈 소스 이미지 크기 조정 라이브러리입니다 .
Java로 고품질 썸네일을 만드는 것은 놀라 울 정도로 어려울 수 있으며 결과 코드가 매우 어려울 수 있기 때문에이 라이브러리를 작성했습니다. Thumbnailator를 사용하면 간단한 유창한 API를 사용하여 상당히 복잡한 작업을 표현할 수 있습니다.
간단한 예
간단한 예를 들어, 이미지를 가져 와서 100 x 100으로 크기를 조정하고 (원본 이미지의 가로 세로 비율을 유지) 파일에 저장하면 단일 명령문으로 달성 할 수 있습니다.
Thumbnails.of("path/to/image")
.size(100, 100)
.toFile("path/to/thumbnail");
고급 예
Thumbnailator의 유연한 인터페이스를 통해 복잡한 크기 조정 작업을 간편하게 수행 할 수 있습니다.
다음을 수행한다고 가정 해 봅시다.
- 디렉토리에서 이미지를 가져와
- 원본 이미지의 가로 세로 비율로 100 x 100으로 크기를 조정합니다.
- 의 품질 설정을 사용하여 JPEG에 모두 저장하십시오
0.85
. - 파일 이름은 처음에
thumbnail.
추가 된 원본에서 가져옵니다.
Thumbnailator로 번역하면 다음과 같이 위의 작업을 수행 할 수 있습니다.
Thumbnails.of(new File("path/to/directory").listFiles())
.size(100, 100)
.outputFormat("JPEG")
.outputQuality(0.85)
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);
이미지 품질 및 속도에 대한 참고 사항
이 라이브러리는 또한 만족스러운 런타임 성능을 보장하면서 고품질 썸네일을 생성하기 위해 Chet Haase 및 Romain Guy의 Filthy Rich Clients 에서 강조된 점진적 이중 선형 스케일링 방법을 사용합니다 .
답변
이를 위해 라이브러리가 필요하지 않습니다. Java 자체로 할 수 있습니다.
Chris Campbell은 이미지 스케일링에 대해 훌륭하고 자세한 글을 작성했습니다 ( 이 기사 참조) .
Chet Haase와 Romain Guy는 그들의 책 Filthy Rich Clients 에 이미지 스케일링에 대한 상세하고 매우 유익한 글을 썼습니다 .
답변
Java Advanced Imaging 은 이제 오픈 소스이며 필요한 작업을 제공합니다.
답변
큰 이미지를 다루거나 멋진 결과를 원한다면 자바에서 사소한 작업이 아닙니다. Graphics2D를 통한 재조정 작업을 통해 간단하게 수행하면 고품질 썸네일이 생성되지 않습니다. JAI를 사용하여 수행 할 수 있지만,보기에 좋은 것보다 더 많은 작업이 필요하고 JAI는 OutOfMemory 오류로 JVM을 불쾌하게 만드는 습관이 있습니다.
ImageMagick을 외부 실행 파일로 사용하는 것이 좋습니다. 사용하기 쉽고 작업을 올바르게 수행하므로 필요하지 않습니다.