import java.io.File;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Test {

    public static void main(String[] args) {
  // 방법1
  Image img = new ImageIcon(이미지경로).getImage();
  System.out.println( img.getWidth(null) + "," + img.getHeight(null) );

 

  // 방법2
  try
  {
   File file = new File(이미지경로);
   BufferedImage bi = ImageIO.read( file );
   System.out.println( bi.getWidth() + "," + bi.getHeight() );
  } catch( Exception e ) {
   System.out.println("이미지 파일이 아닙니다.");
  }
    }
}

 

Image 를 쓰는 방법과 BufferedImage 를 쓰는 방법이 있는데

둘다 결과는 똑같지만 후자를 쓰는 이유는...

JSP에서 전자를 쓰면 이미지 파일이 아닌 파일(avi나 exe 같은)은 한동안 파일 락이 걸려서

삭제나 이동이 불가하였고 flush 도 해봤지만 똑같은 증상이 발생하였습니다.

반면 후자는 아무 문제 없었습니다. JAVA 로 실행시에는 문제가 발생하진 않습니다.

문제의 원인과 해결 방법을 아시는 분은 댓글 부탁드립니다.

'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 리사이즈(썸네일)  (0) 2011.04.06
이미지 파일 첨부할 때 이미지 미리보기 기능을 구현하다가 막혀서 구글링 중에 찾은 포스팅인데
더 수정할 필요 없이 바로 사용해도 무리없는 소스를 발견하여 스크랩하여 둔다.

<html>
<head>
    <title></title>
    <style type="text/css">
        .preView { width: 70px; height: 70px; text-align: center; border:1px solid silver; }
    </style>
    <script type="text/javascript">

        function fileUploadPreview(thisObj, preViewer) {
            if(!/(\.gif|\.jpg|\.jpeg|\.png)$/i.test(thisObj.value)) {
                alert("이미지 형식의 파일을 선택하십시오");
                return;
            }

            preViewer = (typeof(preViewer) == "object") ? preViewer : document.getElementById(preViewer);
            var ua = window.navigator.userAgent;

            if (ua.indexOf("MSIE") > -1) {
                var img_path = "";
                if (thisObj.value.indexOf("\\fakepath\\") < 0) {
                    img_path = thisObj.value;
                } else {
                    thisObj.select();
                    var selectionRange = document.selection.createRange();
                    img_path = selectionRange.text.toString();
                    thisObj.blur();
                }
                preViewer.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fi" + "le://" + img_path + "', sizingMethod='scale')";
            } else {
                preViewer.innerHTML = "";
                var W = preViewer.offsetWidth;
                var H = preViewer.offsetHeight;
                var tmpImage = document.createElement("img");
                preViewer.appendChild(tmpImage);

                tmpImage.onerror = function () {
                    return preViewer.innerHTML = "";
                }

                tmpImage.onload = function () {
                    if (this.width > W) {
                        this.height = this.height / (this.width / W);
                        this.width = W;
                    }
                    if (this.height > H) {
                        this.width = this.width / (this.height / H);
                        this.height = H;
                    }
                }
                if (ua.indexOf("Firefox/3") > -1) {
                    var picData = thisObj.files.item(0).getAsDataURL();
                    tmpImage.src = picData;
                } else {
                    tmpImage.src = "file://" + thisObj.value;
                }
            }
        }

    </script>
</head>
<body>
    <input id="fileData" name="fileData" type="file" onchange="fileUploadPreview(this, 'preView')" />
    <div id="preView" class="preView" title="이미지미리보기"></div>
</body>
</html>

출처 : Junyong's blog - http://junyong.pe.kr/98

'Dev > Javascript' 카테고리의 다른 글

Prototype에서 jQuery로 옮겨타기  (0) 2011.07.31
Firebug의 console 파헤치기.  (0) 2011.07.19
fireBug 사용법  (0) 2011.07.19
[jQuery] firebug로 디버그  (0) 2011.07.19
Javascript 배열 메서드  (0) 2011.04.29

자바에서 Java Advanced Imaging 클래스를 제공한다.


사이트는 https://jai-imageio.dev.java.net/ 여긴데 다운로드를 뒤져봐도

api 명세에 있는 javax.media.jai.JAI 클래스를 찾을수가 없더라...

그래서 따로 검색...

 

JAI apidocs는 http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/index.html 에서 볼 수 있다.


그럼, 간단하게 이미지를 리사이즈하는 방법을 알아보자,


  ParameterBlock pb = new ParameterBlock();
  pb.add("source_image.jpg");

  RenderedOp rOp = JAI.create("fileload", pb);


JAI.create()의 두번째 인자로 각각을 넣어줄 수도 있지만 JAI 1.1 이후 deprecated되었으므로 ParameterBlock를 생성하여 넘기는 방법을 쓰자,

생성한 ParameterBlock객체에 .add로 파일명을 넣어주면 된다.


  BufferedImage im = rOp.getAsBufferedImage();


입력 파일에 대해 BufferedImage형식으로 받아오고,


  BufferedImage thumb = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);


썸네일(리사이즈)이미지를 위한 공간을 만든다. 50,50은 width, height되겠다.


  Graphics2D g2 = thumb.createGraphics();
  g2.drawImage(im, 0, 0, 50, 50, null);


썸네일 버퍼공간에 대해 Graphics2D객체를 얻어와서 입력이미지에 있는 내용을 그린다.(0,0위치에 50,50크기로 복사)


  File outfile = new File("thumb.jpg");
  ImageIO.write(thumb, "jpg", outfile);


출력파일에 대한 객체를 만들고 ImageIO.write로 출력.

 

이미지 리사이즈 이외에도 입력 이미지를 BufferedImage형식으로 받아올 수 있기 때문에

이미지에 대한 작업이 전반적으로 가능하다.

 

참고로 각 필요 클래스의 위치는 다음과 같다.

 

java.io.File

java.awt.Graphics2D

java.awt.image.BufferedImage

javax.imageio.ImageIO

javax.media.jai.JAI

javax.media.jai.RenderedOp

 

JAI클래스들은 첨부파일을 다운받아 압축을 풀면 나오는 세 jar파일을 jdk홈/jre/lib/ext에 넣으면 된다.

톰캣에서 서비스를 위해서는 톰캣홈/common/lib에 마찬가지로 복사


'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 사이즈 추출 예제  (0) 2011.04.23

+ Recent posts