달력

3

« 2019/3 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  
  •  

'자바'에 해당되는 글 1

  1. 2010.08.30 이미지에 워터마크 넣기
2010.08.30 12:45

이미지에 워터마크 넣기 개발2010.08.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.08.30
아이폰 웹개발시 팁  (0) 2010.07.29
클래스 이름을 사용하여 요소찾기  (0) 2010.06.02
JSTL 중 루프태그의 상태보기 (varStatus)  (0) 2010.04.15
Posted by 에드몽단테스