인터넷에는 축소판을 생성하는 ASP 구성 요소가 많이 있습니다. 귀하의 가상 공간이 새로운 구성요소 등록을 지원하지 않는다면 귀하의 웹사이트가 빛을 잃었다고 느낄 수도 있습니다. 나는 그다지 재능이 없기 때문에 온라인 리소스를 결합하여 참조용으로만 구성 요소가 없는 썸네일 생성 프로그램을 작성했습니다.
먼저 기본 사항을 살펴보겠습니다. 먼저, 페이지에 이미지를 표시하는 코드가 다음과 같다는 것을 알고 있습니다.
<img src=pic.gif 테두리=0 너비=300 높이=260>
src는 이미지 경로이고, border는 이미지 가장자리 너비를 제어하고, width는 이미지의 길이, height는 이미지의 높이를 제어합니다. 썸네일 생성은 실제로 원본 크기에 맞게 조정됩니다. 그러나 일반적으로 왜곡을 최소화하기 위해 비례적으로 크기를 조정합니다. 따라서 이미지의 길이와 너비 치수를 얻는 것이 썸네일 생성의 초점이 되었습니다.
구성요소 없는 썸네일 생성을 작성하는 단계는 다음과 같습니다.
1. 구성요소 없이 이미지 크기 얻기
얼마 전 ASP를 처음 배웠을 때 구성 요소 없이 이미지 크기를 얻기 위해 ASCII 코드를 사용하는 기사를 본 적이 있습니다. 나중에 시도해 보니 jpg 사진의 크기가 제대로 표시되지 않는 것을 발견했습니다. 온라인으로 확인해보니 많은 웹사이트에서 이 프로그램을 재인쇄했지만 아무도 이 프로그램의 단점을 지적하지 않았고 단점도 있었습니다. 해결되었습니다. 나중에 다시 검색해보니 ADODB.stream을 사용하여 이미지 크기를 얻는 방법을 소개한 글이 있었는데, 소개된 방법에 따라 내부 코드를 수정해서 사용해 보았는데, 효과가 정말 좋습니다. 당신과 함께:
ADODB.stream을 사용하여 이미지 크기의 일반 클래스를 얻습니다.
<%
'////////////// GPS: 사진 크기 가져오기 ///////////////
'//////////////ADODB.stream을 사용하여 이미지 크기 얻기 ///////////////
'/////////Leon (心清) 인용 2005년 8월 11일//////////
클래스 GPS
딤 아소
비공개 하위 클래스_초기화
aso=CreateObject(Adodb.Stream)로 설정
aso.모드=3
aso.유형=1
aso.Open
서브 끝
비공개 하위 클래스_종료
aso=아무것도 설정하지 않음
서브 끝
개인 함수 Bin2Str(Bin)
희미한 I, Str
I=1 ~ LenB(Bin)의 경우
clow=MidB(빈,I,1)
AscB(clow)<128이면
Str = Str & Chr(ASCB(clow))
또 다른
나=나+1
I <= LenB(Bin)이면 Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))
endIf
다음
Bin2Str = Str
기능 종료
개인 함수 Num2Str(num,base,lens)
'GPS (2005-8-11)
어두워
레트 =
동안(숫자>=기본)
ret = (num mod base) & ret
num = (num - num mod 베이스)/base
향하게 하다
Num2Str = right(string(lens,0) & num & ret,lens)
기능 종료
개인 함수 Str2Num(str,base)
'GPS (2005-8-11)
어두워
리트 = 0
i=1에서 len(str)까지
ret = ret *base + cint(mid(str,i,1))
다음
Str2Num=ret
기능 종료
개인 함수 BinVal(bin)
'GPS (2002-8-11)
어두워
레트 = 0
i = lenb(bin)에서 1단계 -1까지
ret = ret *256 + ascb(midb(bin,i,1))
다음
BinVal=ret
기능 종료
개인 함수 BinVal2(bin)
'GPS (2002-8-11)
어두워
리트 = 0
i = 1에서 lenb(bin)까지
ret = ret *256 + ascb(midb(bin,i,1))
다음
BinVal2=ret
기능 종료
'///다음은 호출 코드입니다///
함수 getImageSize(filespec)
'GPS (2002-8-11)
희미한 레트(3)
aso.LoadFromFile(파일 사양)
bFlag=aso.read(3)
선택 사례 hex(binVal(bFlag))
사례 4E5089:
aso.read(15)
ret(0)=PNG
ret(1)=BinVal2(aso.read(2))
aso.read(2)
ret(2)=BinVal2(aso.read(2))
사례 464947:
aso.read(3)
ret(0)=GIF
ret(1)=BinVal(aso.read(2))
ret(2)=BinVal(aso.read(2))
케이스 535746:
aso.read(5)
binData=aso.Read(1)
sConv=Num2Str(ascb(binData),2,8)
nBits=Str2Num(왼쪽(sConv,5),2)
sConv=중간(sConv,6)
while(len(sConv)<nBits*4)
binData=aso.Read(1)
sConv=sConv&Num2Str(ascb(binData),2,8)
향하게 하다
ret(0)=SWF
ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20)
ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2))/20)
케이스 FFD8FF:
하다
do: p1=binVal(aso.Read(1)): p1=255이고 aso.EOS가 아닌 동안 루프를 반복합니다.
p1>191이고 p1<196이면 종료합니다. else aso.read(binval2(aso.Read(2))-2)
do:p1=binVal(aso.Read(1)):p1<255이고 aso.EOS가 아닌 동안 루프
true인 동안 루프
aso.읽기(3)
ret(0)=JPG
ret(2)=binval2(aso.Read(2))
ret(1)=binval2(aso.Read(2))
그 밖의 경우:
left(Bin2Str(bFlag),2)=BM이면
aso.읽기(15)
ret(0)=BMP
ret(1)=binval(aso.Read(4))
ret(2)=binval(aso.Read(4))
또 다른
리트(0)=
종료하면
선택 종료
ret(3)=너비= & ret(1) & 높이=
& ret(2)&
getimagesize=ret
기능 종료
수업 종료
%>
위의 코드를 복사하여 GPS.asp 파일을 생성하면 구성 요소 없이 이미지 크기를 얻기 위한 일반 클래스가 OK가 됩니다.
2. 이미지 경로 가져오기
두 개 이상의 사진이 있고 사진을 카테고리별로 저장해야 하므로 데이터베이스에 사진의 상대 경로를 저장하기 위한 ImgURL 필드를 설계했습니다. 업로드된 모든 사진은 이미지라는 폴더에 넣습니다(구성 요소 없이 사진을 업로드하는 방법에 대해서는 자세히 설명하지 않겠습니다). 이제 먼저 축소판 그림과 관련 정보를 표시하는 ShowImg.asp 페이지를 디자인합니다. 구체적인 디자인은 다음과 같습니다.
그림:
이미지 형식:
이미지 크기:
이미지 크기:
클릭수:
다음으로 이미지의 절대 경로를 얻습니다. 코드는 다음과 같습니다:
<%
'/////ShowImg.asp의 절대 경로를 가져옵니다/////
희미한 현재 파일
curFile=Server.mappath(Request.server변수(PATH_INFO))
희미한 곡선 파일 이름, 파일 이름
'/////그림의 상대 경로(데이터베이스에 저장됨)
cufilename=rs(ImgURL)
'/////ShowImg.asp는 이미지와 동일한 디렉터리에 있으므로 instrrev를 사용하여 이미지 경로를 가져옵니다/////
파일 이름=left(curFile,instrrev(curFile,/))&cu파일 이름
'/////GPS 클래스 엔터티 생성/////
희미한 GetPicSize
GetPicSize=새 GPS 설정
fs=Server.CreateObject(Scripting.FileSystemObject)를 설정합니다.
'/////사진 유형 가져오기/////
흐릿한 그림 접미사 이름
PicSuffixName=fs.GetExtensionName(파일 이름)
희미한 PD'//사진 크기
희미한 P폭, P높이
사례 PicSuffixName 선택
사례 gif,bmp,jpg,png:
'/////GPS 일반 클래스에서 GetImageSize 함수를 호출하여 이미지 크기를 얻습니다/////
PD=GetPicSize.GetImageSize(파일 이름)
PWidth=PD(1) '//그림 너비를 가져옵니다.
PHeight=PD(2) '//그림 높이를 구합니다.
케이스 SWF
PD=GetPicSize.GetImageSize(파일 이름)
PWidth=PD(1) '//플래시 너비 가져오기
PHeight=PD(2) '//플래시 높이를 구합니다.
그렇지 않은 경우
선택 종료
fs=아무것도 설정하지 않음
GetPicSize=아무것도 설정하지 않음
%>
위 코드를 <body> 상단에 복사하면 OK!
물론 어떤 사람들은 경로를 얻기 위해 PATH_INFO를 사용할 필요가 없다고 말할 것입니다. 그냥 server.mappath()를 직접 사용할 수 있습니다. 하하. 주된 이유는 PATH_INFO를 사용하여 얻을 수 있다는 것입니다. FSO의 일부 기능을 인식하고 서버를 사용합니다. .mappath()가 작동하지 않아서 계속 사용했습니다.
3. 썸네일 크기 정의
코드의 이 부분은 보는 사람의 눈에 달려 있으며, 현명한 사람은 지혜를 봅니다. 먼저 썸네일 표시 크기 범위를 지정해야 합니다(예: 300X260). 코드는 다음과 같이 작성할 수 있습니다.
<%
희미한 PXWidth,PXHeight
희미한 Pp '//비율
PWidth=0 또는 PWidth=이면
PX폭=0
PX높이=0
또 다른
Pp=FormatNumber(PWidth/PHeight,2) '//가로세로 비율
종료 조건
PWidth>=PHeight이면
PWidth>=300이면
PX폭=300
PXHeight=FormatNumber(300/Pp,0)
또 다른
PX폭=P폭
PXHeight=PHeight
종료 조건
또 다른
PHight>=260이면
PX높이=260
PXWidth=형식번호(260*Pp,0)
또 다른
PX폭=P폭
PXHeight=PHeight
종료 조건
종료 조건
%>
두 번째 단계 직후에 위 코드를 작성하세요. 호출 시 코드는 다음과 같습니다.
<img src=<%=curfilename%> 테두리=0 너비=<%=PXWidth%>
높이=<%=PX높이%>>
사진 형식은 <%=PicSuffixName%>을 사용하여 얻을 수 있으며 사진 크기는 다음과 같이 쓸 수 있습니다.
<%
response.write PXWidth&X&PXHeight
%>
이미지 크기는 FSO.GetFileSize(filename)을 사용하여 구현 가능하며, 클릭 수는 SQL 문을 사용하여 간단히 구현 가능합니다. 구체적인 코딩은 다시 설명하지 않습니다.
이런 식으로 컴포넌트가 필요 없는 썸네일 생성 프로그램이 작성되었습니다. 다소 차용했을 수도 있지만, 모두가 이 방법을 익힐 수 있다면 크게 개선될 것이라고 믿습니다.