[java] Java를 사용하여 이미지 크기를 조정하는 방법은 무엇입니까?

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를 수행하면 여전히 가비지처럼 보입니다.


답변

ThumbnailatorMIT 라이센스에 따라 유창한 인터페이스를 갖춘 Java 용 오픈 소스 이미지 크기 조정 라이브러리입니다 .

Java로 고품질 썸네일을 만드는 것은 놀라 울 정도로 어려울 수 있으며 결과 코드가 매우 어려울 수 있기 때문에이 라이브러리를 작성했습니다. Thumbnailator를 사용하면 간단한 유창한 API를 사용하여 상당히 복잡한 작업을 표현할 수 있습니다.

간단한 예

간단한 예를 들어, 이미지를 가져 와서 100 x 100으로 크기를 조정하고 (원본 이미지의 가로 세로 비율을 유지) 파일에 저장하면 단일 명령문으로 달성 할 수 있습니다.

Thumbnails.of("path/to/image")
    .size(100, 100)
    .toFile("path/to/thumbnail");

고급 예

Thumbnailator의 유연한 인터페이스를 통해 복잡한 크기 조정 작업을 간편하게 수행 할 수 있습니다.

다음을 수행한다고 가정 해 봅시다.

  1. 디렉토리에서 이미지를 가져와
  2. 원본 이미지의 가로 세로 비율로 100 x 100으로 크기를 조정합니다.
  3. 의 품질 설정을 사용하여 JPEG에 모두 저장하십시오 0.85.
  4. 파일 이름은 처음에 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을 외부 실행 파일로 사용하는 것이 좋습니다. 사용하기 쉽고 작업을 올바르게 수행하므로 필요하지 않습니다.


답변

만약 여러분의 maschine에 imagemagick을 설치하는 것이 옵션이라면, im4java를 추천 합니다 . 커맨드 라인 인터페이스에 대한 매우 얇은 추상화 계층이지만 그 기능은 매우 훌륭합니다.