ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이미지에 워터마크 넣기
    개발 2010. 8. 30. 12:45

    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.Random;

    import javax.imageio.ImageIO;

    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;

    public final static void markImage(String srcImg, String markImg, float alpha, int mark_position)
      {
        try
        {
          File _file = new File(srcImg);
          if(!_file.exists()) return;
         
          Image src = ImageIO.read(_file);
          int width = src.getWidth(null);
          int height = src.getHeight(null);
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
          Graphics2D g = image.createGraphics();
          g.drawImage(src, 0, 0, width, height, null);

          // watermark image file
          File markFile = new File(markImg);
          if(!markFile.exists()) return;
         
          Image mark_img = ImageIO.read(markFile);
          int mark_img_width = mark_img.getWidth(null);
          int mark_img_height = mark_img.getHeight(null);
          g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

          // 우측 하단에 워터마크 표시
          g.drawImage(mark_img, (width - mark_img_width - 10), (height - mark_img_height - 10), mark_img_width, mark_img_height, null);
          g.dispose();

          FileOutputStream out = new FileOutputStream(srcImg);
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
          encoder.encode(image);
          out.close();
        } catch (Exception e)
        {
          e.printStackTrace();
        }
      }

    이미지 크기와 동일한 BufferedImage 를 만든다.
    그리고 워터마크를 위에 덮을 것이기 때문에 그래픽 모드를 변경한다.
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
    워터마크를 이미지의 우측 하단에 넣는다.

    이미지를 겹치는 것은 어려운 것이 아닌데, 워터마트의 특징을 살리기 위해 워터마트가 투명일 경우 이미지와 잘 매치가 되는 것이 중요하다. 이 역할을 setComposite() 메소드가 담당한다.
    알파속성을 가진 인스턴트를 생성해야 하는데 여기에서는 AlphaComposite.SRC_ATOP 를 이용했다.
    이 속성에 대해서는 java api 를 참조할 수 있다.
    alpha 값은 0 ~ 1까지 설정할 수 있는데, 0은 투명, 1은 불투명을 나타난다.

    완전한 코드는 http://freecode-freecode.blogspot.com/2008/06/how-to-add-watermark-to-images-in-java.html 참고

    반응형

    '개발' 카테고리의 다른 글

    엑셀함수 RATE()  (0) 2010.10.05
    open api 로 우편번호 검색하기  (8) 2010.08.31
    아이폰 웹개발시 팁  (0) 2010.07.29
    클래스 이름을 사용하여 요소찾기  (0) 2010.06.02
    JSTL 중 루프태그의 상태보기 (varStatus)  (0) 2010.04.15

    댓글

Designed by Tistory.