asp나 php로는 간단하게 구현되는 섬네일이 자바에서는구현하기가 만만치 않다.

불행중 당행으로JDK 1.4 부터는 Image I/O API가 추가되었다고 하니

JDK 1.4 이상이거나 MS Windows이거나 유닉스라도 X-Window가 구동이 되는 환경이라면

잠깐의 웹 검색만으로 훌륭한 샘플을 얻을 수 있을것이다.

아쉽게도 본인이 일하는 곳의 환경 SUN Solaris에 Weblogic 6.1 + JDK 1.3

X window 설정이 제되로 되어 있지 않았다.

(전임자가 이런 저런 방법으로 일주일정도 고생했는데 X-Window설정을 잡지 못하고 포기했다고 한다.)

여기저기 검색끝에 PJA Toolkit 이라는 놈을 이용하면X-Window 없이도 섬네일을 구현할 수 있다고 한다.

http://blog.naver.com/jeany4u/30000252147

국내 사이트에서 검새으로 찾은 PJA에 관한 자료는 모두 이글의 카피본 인듯 하다.

본인역시 저 글을 참조했지만 설명이 부족해서 인지 한나절 정도 헤멨다.(토요일 오후에 이게 뭔짓거리인지 -.,ㅡa)

자세한 내용이 궁금하신 분은 저위에 링크되어 있는 글과http://www.eteks.com/pja/en/사이트를 참고 하시길...

(붉은색으로 표시된 곳은 자신의 환경에 맞도록 하면됨)

1. http://www.eteks.com/pja/en/#Download에서 Other platforms pja_2.5.zip을 받는다.

2. 압축을 풀면 몇개의 jar파일이 생성되는데

pja_2.5/lib/pja.jar

pja_2.5/lib/pjatools.jar

이 두개의 jar파일만 있으면 된다.서버의 원하는 위치에 위치하도록 한다.

본인의경우 /user/pja/lib 아래에 두었다.

3. /user/pja/lib/fonts 폴더를 생성

4. 우리 서버의 경우 jdk1.3 이 /user/jdk131 에 설치되어 있었다.

jdk1.3 JVM의 폰트를 가져다 쓰도록 했다.

/user/jdk131/jre/lib/font.properties-> /user/pja/lib/font.properties 복사

/user/jdk131/jre/lib/font.properties.co -> /user/pja/lib/font.properties.co복사

/user/jdk131/jre/lib/fonts/*.ttf->/user/pja/lib/fonts/*.ttf 복사

5. /user/bea/wlserver6.1/config/mydomain/startWebLogic.sh에 자바옵션을 추가

# For PJA Image library
JAVA_OPTIONS="$JAVA_OPTIONS -Xbootclasspath/a:/user/pja/lib/pja.jar"
JAVA_OPTIONS="$JAVA_OPTIONS -Dawt.toolkit=com.eteks.awt.PJAToolkit"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava2d.font.usePlatformFont=false"
JAVA_OPTIONS="$JAVA_OPTIONS -Duser.home=/user/pja/lib"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava.awt.fonts=/user/pja/lib/fonts"
CLASSPATH=$CLASSPATH:/user/pja/lib/pjatools.jar

각 변수의 의미는 http://blog.naver.com/jeany4u/30000252147를 참고하도록 한다.

CLASSPATH에 pjatools.jar 를 걸어주지 않으면 일부 클래스를 import하지 못함

물론 pjatools.jar의 클래스를 사용하지 않을꺼라면 안해도 무방

6. 웹로직을 재기동 한다.

7. 샘플 JSP

<%@ page import="java.awt.*"%>
<%@ page import="java.io.*"%>
<%@ page import="Acme.JPM.Encoders.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.awt.image.*"%>
<%
String args[] = new String[5];
args[0] = "/user/webroot/pjatest/DSC_2078.JPG"; // 절대 경로를 사용해야 한다.
args[1] = "/user/webroot/pjatest/thumbDSC_2078.jpg"; // 절대 경로를 사용해야 한다.
args[2] = "200";
args[3] = "300";
args[4] = "80";
Image image = Toolkit.getDefaultToolkit().getImage(args[0]);
MediaTracker mediaTracker = new MediaTracker(new Frame());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = Integer.parseInt(args[2]);
int thumbHeight = Integer.parseInt(args[3]);
double thumbRatio = (double)thumbWidth / (double)thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double)imageWidth / (double)imageHeight;
if (thumbRatio < imageRatio) thumbHeight = (int)(thumbWidth / imageRatio);
else thumbWidth = (int)(thumbHeight * imageRatio);
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly (drawImage is quite powerful)
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
BufferedOutputStream Imgout = new BufferedOutputStream(new FileOutputStream(args[1]));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(Imgout);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt(args[4]);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float)quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
%>
<IMG SRC="/pjatest/DSC_2078.JPG" ALT="">
<IMG SRC="/pjatest/thumbDSC_2078.jpg" ALT="">

8. Java Beans로만든샘플다운로드

PJAThumbNail.java

'Java' 카테고리의 다른 글

이런코딩 하지말자  (0) 2008.07.09
[JSP] request.getParameterNames(); 예제  (0) 2008.07.09
[UNIX] crontab에서 자바프로그램 실행(한글문제 해결법)  (1) 2007.04.11
[Java] Singleton 패턴...  (0) 2007.01.09
[Java] ftp client  (0) 2007.01.09

+ Recent posts