안규 공부방

ACTIVE SERVER PAGE > CxImage 컴포넌트 - 섬네일 이미지 저장

등록일 : 2017-07-04 17:16 조회수 : 68,519

이번시간에는 이미지의 사이즈를 조절해서 서버에 저장하는 소스를 공개하도록 하겠습니다.

이미지의 사이즈를 조절하는 방법은 이전 강의에서 설명을 드렸습니다.

만약 관리자나 사용자가 이미지 게시판을 통해 이미지를 업로드 한다고 가정할때,
원본이미지를 서버에 저장을 할겁니다. 이 경우, Fileman 이나 싸이트 겔러시 컴포넌트등을
이용해서 서버에 저장을 하게 됩니다.

이전시간에 배운걸 이용한다면, 서버에 저장되어 있는 원본이미지를 단순히 작게 만들어
뿌리기만 하였습니다.

이런경우, 상당한 문제가 발생할수 있습니다.

저의 경우 이미지 게시판을 만들어 보았습니다. 방문자가 얼마 안될때는 상관이 없지만,
조금만 방문자가 늘어나도, 서버에 막대한 부하를 줄수 있다는 겁니다.
왜냐하면, 이미지를 하나 불러올 때마다 Thumbnail.asp 에서

Set objCxImage = Server.CreateObject("CxImageATL.CxImage")

컴포넌트의 인스턴트를 계속 만들어야 하기 때문입니다.

그렇다면 어떤 방법을 통해서 서버의 부하를 줄일수가 있을까요???
저의 경우를 예를 들자면,

1. write.asp 에서 파일을 선택해서 submit 합니다.
2. write_ok.asp 에서 객체를 받아 싸이트 겔럭시 컴포넌트를 이용해서 서버에 원복파일을 저장합니다.
3. write_ok.asp 에서 내용을 디비에 저장합니다.
4. write_ok.asp 에서 CxImageATL 컴포넌트를 이용해서 작은 이미지를 만들어 서버의 섬네일 폴더에 따로
   저장을 합니다.
5. 이미지를 뿌릴때는 <img src="이미지명">   과 같은 형식으로 작은 섬네일 이미지를 뿌립니다.

저의 경우는 위와 같은 형식으로 해결을 하였습니다.
물론 write_ok.asp 에서 부하가 약간 걸리기는 하지만, 매번 뿌려줄때 부하가 걸리는 것 보다는
엄청나게 퍼포먼스를 줄일수가 있었습니다.
글쓸때나 퍼포먼스를 잡아먹기 때문에 크게 부담이 없어졌습니다.

물론 저장하는 방법을 알아내기  까지는 저 개인적으로도 굉장한 시간을 보내야 했습니다.
소스는 한줄로 끝나지만 몰랐을때는 난감하더라구요.

그럼, 이 시간에는 write_ok.asp 의 내용만을 예제로 설명을 드리도록 하겠습니다. 이미지 업로드하는
방법이야, 모두 알고 계시리라 믿고, 그부분의 설명은 일단 배제하도록 하겠습니다.

파일이 업로드 된다고 가정하고 진행 하겠습니다.

여기에서 Filename 변수는 업로드된 화일명이 됩니다.
 
<%
	'---------------------------------
	'      파일명 : Write_ok.asp 의 일부분
	'---------------------------------
  	VFilePath0 = "/pic/"&Filename
  	FilePath0 = Server.MapPath(VFilePath0)

  	VFilePath1 = "/pic1/"&Filename
  	FilePath1 = Server.MapPath(VFilePath1)
  
  	Width = 140
  	Height = 140
  	Quality = 100 	

  	Set objCxImage = Server.CreateObject("CxImageATL.CxImage")
  	Call objCxImage.Load(FilePath0,GetFileType(FilePath0))
  	
 
  	BinData = objCxImage.ImageForASP(GetFileType(FilePath0),Quality)  

  	widthOrig = CDbl(objCxImage.GetWidth())
  	heightOrig = CDbl(objCxImage.GetHeight())
  	fx = widthOrig/Width
  	fy = heightOrig/Height 
  

  	If fx>fy Then f=fx Else f=fy  
  	If f<1 Then f=1
  		widthTh = Int(widthOrig/f)
  		heightTh = Int(heightOrig/f)  
  		
	Call objCxImage.Resample(widthTh,heightTh,2)    
	Call objCxImage.save(FilePath2,GetFileType(FilePath2)) 
  
  	Function GetFileType(sFile)
  		dot = InStrRev(sFile, ".")
  		filetype=2
  		If dot > 0 Then sExt = LCase(Mid(sFile, dot + 1, 3))
  		If sExt = "bmp" Then filetype = 0
  		If sExt = "gif" Then filetype = 1
  		If sExt = "jpg" Then filetype = 2
  		If sExt = "png" Then filetype = 3
  		If sExt = "ico" Then filetype = 4
  		If sExt = "tif" Then filetype = 5
  		If sExt = "tga" Then filetype = 6
  		If sExt = "pcx" Then filetype = 7
  		GetFileType=filetype
 	End Function
 	%>



pic 이미지에 저장된 원본파일(FilePath0) 을  pic1 폴더에 저장을 합니다.(FilePath1)

다른 소스들은 일단 앞서(이전 강의) 설명드린 Thumbnail.asp 와 상당부분 일치하기
때문에 제가 따로 설명을 드리지는 않겠습니다.

중요한 부분은

Call objCxImage.save(FilePath1,GetFileType(FilePath1))

위 부분입니다. save 메소스를 통해 서버에 저장합니다. FilePath2 위치가 저장되는 위치입니다.
원본이미지는 메모리에 상주되었기 때문에 따로 경로를 지정하지 않아도 저장이 됩니다.

상당히 쉽게 느껴졌으리라 생각됩니다. 저도 이방법을 알기 전에는 굉장히 고생을 많이 했습니다.

다음 강의는 강의라기 보다는 CxImageATL 컴포넌트의 기타 메소드를 정리해 보도록 하겠습니다.

그럼, 즐거운 시간 되시길 바랍니다.
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.