문제

자바에서 두 가지 일을하는 가장 좋은 방법에 대해 생각하고 있습니다.

  1. .png의 배경 1 개, 다른 하나는 .gif 또는 .png의 두 이미지를 병합합니다 (투명성이 있고 첫 번째는 겹치는 것);
  2. 병합 된 이미지를 .gif (투명성)로 변환하십시오.

Java 클래스의 이미지를 처리하고 결과 이미지를 파일에 작성하기 위해 렌더링하고 싶지 않습니다.

누구든지 나를 도울 수 있습니까? 이것을하는 가장 좋은 방법은 무엇입니까? 고맙습니다!

편집 : 제안에 감사드립니다! 이것이 내가 사용한 것입니다! 아주 간단합니다!

BufferedImage background = ImageIO.read(new File("image.jpg"));
WritableRaster raster = background.getRaster();
BufferedImage layer = ImageIO.read(new File("overlay.png"));
Graphics2D g2d = (Graphics2D)background.getGraphics();
g2d.drawImage(layer,72,80,null);

두 번째 문제에 대해, 나는 여전히 투명성으로 .gif 확장으로 이것을 저장할 수 없습니다. 이것

ImageIO.write(bufferedImage,"gif",file);

.gif 이미지 파일을 생성하지만 투명성을 잃습니다! 내가 어떻게 할 수 있는지 아는 사람이 있습니까? JAI에는 GIF 인코더도 없습니다. 고맙습니다.

도움이 되었습니까?

해결책

응용 프로그램이 확실하지 않지만 이것이 서버 기반의 고성능 제품이라면 더 나은 결과가 더 나은 결과를 얻었습니다. Imagemagick Java의 이미지 라이브러리를 사용하는 것보다.

다른 팁

아마도 이 링크 도움이 될 수 있습니까?

구성 요소에 이미지를 렌더링하고 이미지를 페인트하는 것도 동일합니다.

페인트 방법에서 그림을 그리는 대신 method createImage ()를 만들어야합니다. 링크에 제공된 샘플은 다음과 같이 적응할 수 있습니다.

public BufferedImage createImage(Graphics g) {
    BufferedImage image - new BufferedImage(...);



    Graphics2D g2 = image.getGraphics();

    Point2D center =  new Point2D.Float(image.getHeight( ) / 2, image.getWidth( ) / 2);
    AffineTransform at = AffineTransform.getTranslateInstance(center.getX( ) - (bi2.getWidth( ) / 2), center.getY( ) - (bi2.getHeight( ) / 2));

    g2.transform(at);
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2.drawImage(bi2, 0, 0, null);

    Composite c = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .35f);
    g2.setComposite(c);

    at = AffineTransform.getTranslateInstance(center.getX( ) - (bi1.getWidth( ) / 2), center.getY( ) - (bi1.getHeight( ) / 2));
    g2.setTransform(at);
    g2.drawImage(bi1, 0, 0, null);

    return image;
}

외부 의존성을 추가하는 것이 마음에 들지 않으면 Jmagick 바인딩 Imagemagick에.

확실히 체크 아웃하십시오 자이 (API).

기본적으로 알려진 형식 (PNG 및 GIF 포함)으로 인코딩 된 이미지를로드 및 저장할 수 있으며로드 된 후 이미지에서 효율적으로 작동 할 수 있습니다.

특히 당신은 아마도와 같은 것을 찾고있을 것입니다 CompositedEscriptor.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top