มีส่วนประกอบ ASP มากมายบนอินเทอร์เน็ตที่สร้างภาพขนาดย่อ หากพื้นที่เสมือนของคุณไม่รองรับการลงทะเบียนส่วนประกอบใหม่ คุณอาจรู้สึกว่าเว็บไซต์ของคุณสูญเสียความแวววาวไป ฉันไม่ได้มีความสามารถมากนัก ดังนั้นฉันจึงรวมแหล่งข้อมูลออนไลน์เพื่อเขียนโปรแกรมสร้างภาพขนาดย่อแบบไม่มีส่วนประกอบเพื่อใช้อ้างอิงเท่านั้น
มาดูพื้นฐานกันก่อน อันดับแรกเราทราบแล้วว่าโค้ดสำหรับแสดงรูปภาพบนเพจมีดังนี้:
<img src=pic.gif เส้นขอบ=0 ความกว้าง=300 ความสูง=260>
src คือเส้นทางรูปภาพ border ควบคุมความกว้างของขอบรูปภาพ ความกว้างคือความยาวของรูปภาพ และความสูงคือความสูงของรูปภาพ การสร้างภาพขนาดย่อนั้นปรับขนาดตามขนาดดั้งเดิมจริงๆ แต่โดยทั่วไปเพื่อลดความผิดเพี้ยน เราจะปรับขนาดตามสัดส่วน ดังนั้นการได้ขนาดความยาวและความกว้างของรูปภาพจึงกลายเป็นจุดสนใจของการสร้างภาพขนาดย่อ
ต่อไปนี้เป็นขั้นตอนในการเขียนการสร้างภาพขนาดย่อแบบไม่มีส่วนประกอบ:
1. รับขนาดภาพโดยไม่มีส่วนประกอบ
ไม่นานมานี้เมื่อฉันเรียนรู้ ASP ครั้งแรก ฉันเห็นบทความที่ใช้โค้ด ASCII เพื่อให้ได้ขนาดรูปภาพที่ไม่มีส่วนประกอบ ต่อมาฉันลองแล้วพบว่าขนาดของรูปภาพ jpg ไม่สามารถแสดงได้อย่างถูกต้อง ฉันตรวจสอบทางออนไลน์และพบว่ามีเว็บไซต์หลายแห่งพิมพ์โปรแกรมนี้ซ้ำ แต่ไม่มีใครชี้ให้เห็นข้อบกพร่องของโปรแกรมนี้นับประสาอะไรกับการแก้ไข แก้ไขแล้ว ต่อมาผมไปกูเกิลอีกครั้งและในที่สุดก็พบบทความแนะนำการใช้ ADODB.stream เพื่อให้ได้ขนาดภาพ ตามวิธีที่แนะนำ ผมได้แก้ไขโค้ดภายในแล้วลองใช้ดู ได้ผลดีจริงๆ เลยจะมาแชร์ให้ฟัง กับคุณ:
ใช้ ADODB.stream เพื่อรับคลาสขนาดรูปภาพทั่วไป
-
'/////////////// GPS: รับขนาดภาพ ///////////////
'///////////////ใช้ ADODB.stream เพื่อรับขนาดภาพ///////////////
'///////// อ้างโดย Leon (heart清) 11 สิงหาคม 2548//////////
คลาส GPS
ติ่มซำ
คลาสย่อยส่วนตัว_เริ่มต้น
ตั้งค่า aso=CreateObject(Adodb.Stream)
aso.Mode=3
aso.Type=1
aso.เปิด
จบหมวดย่อย
Class_Terminate ย่อยส่วนตัว
ตั้ง aso=ไม่มีอะไร
จบหมวดย่อย
ฟังก์ชั่นส่วนตัว Bin2Str(Bin)
ดิม 1, Str
สำหรับ I=1 ถึง LenB(Bin)
clow=MidB(ถัง,I,1)
ถ้า AscB(clow)<128 แล้ว
Str = Str & Chr(ASCB(โคลว์))
อื่น
ฉัน=ฉัน+1
ถ้าฉัน <= LenB(Bin) ดังนั้น Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))
สิ้นสุดถ้า
ต่อไป
Bin2Str = Str
สิ้นสุดฟังก์ชัน
ฟังก์ชั่นส่วนตัว Num2Str (หมายเลข, ฐาน, เลนส์)
'จีพีเอส (2005-8-11)
รีตสลัว
เกษียณ =
ในขณะที่(หมายเลข>=ฐาน)
ret = (ฐาน mod จำนวน) & ret
num = (ฐาน mod num - num)/ฐาน
เวน
Num2Str = ขวา (สตริง (เลนส์, 0) & num & ret, เลนส์)
สิ้นสุดฟังก์ชัน
ฟังก์ชั่นส่วนตัว Str2Num (str, ฐาน)
'จีพีเอส (2005-8-11)
รีตสลัว
เกษียณ = 0
สำหรับ i=1 ถึง len(str)
ret = ret *base + cint(กลาง(str,i,1))
ต่อไป
Str2Num=ret
สิ้นสุดฟังก์ชัน
ฟังก์ชั่นส่วนตัว BinVal(bin)
'จีพีเอส (2002-8-11)
รีตสลัว
เกษียณ = 0
สำหรับ i = lenb (bin) ถึง 1 ขั้นตอน -1
ret = ret *256 + ascb(midb(bin,i,1))
ต่อไป
BinVal=ret
สิ้นสุดฟังก์ชัน
ฟังก์ชั่นส่วนตัว BinVal2 (bin)
'จีพีเอส (2002-8-11)
รีตสลัว
เกษียณ = 0
สำหรับ i = 1 ถึง lenb (bin)
ret = ret *256 + ascb(midb(bin,i,1))
ต่อไป
BinVal2=ret
สิ้นสุดฟังก์ชัน
'/// ต่อไปนี้เป็นรหัสการโทร///
ฟังก์ชั่น getImageSize (filespec)
'จีพีเอส (2002-8-11)
สลัวรีต(3)
aso.LoadFromFile (ข้อมูลจำเพาะของไฟล์)
bFlag=aso.read(3)
เลือกกรณี hex (binVal (bFlag))
กรณี 4E5089:
aso.อ่าน(15)
ret(0)=PNG
ret(1)=BinVal2(aso.read(2))
aso.อ่าน(2)
ret(2)=BinVal2(aso.read(2))
กรณี 464947:
aso.อ่าน(3)
ret(0)=GIF
ret(1)=BinVal(aso.read(2))
ret(2)=BinVal(aso.read(2))
กรณี 535746:
aso.อ่าน(5)
binData=aso.อ่าน(1)
sConv=Num2Str(ascb(binData),2,8)
nBits=Str2Num(ซ้าย(sConv,5),2)
sConv=กลาง(sConv,6)
ในขณะที่(เลน(sConv)<nBits*4)
binData=aso.อ่าน(1)
sConv=sConv&Num2Str(ascb(binData),2,8)
เวน
ret(0)=SWF
ret(1)=int(abs(Str2Num(กลาง(sConv,1*nBits+1,nBits),2)-Str2Num(กลาง(sConv,0*nBits+1,nBits),2))/20)
ret(2)=int(abs(Str2Num(กลาง(sConv,3*nBits+1,nBits),2)-Str2Num(กลาง(sConv,2*nBits+1,nBits),2))/20)
เคส FFD8FF:
ทำ
ทำ: p1=binVal(aso.Read(1)): วนซ้ำในขณะที่ p1=255 และไม่ใช่ aso.EOS
ถ้า p1>191 และ p1<196 ให้ออกจาก do else aso.read(binval2(aso.Read(2))-2)
do:p1=binVal(aso.Read(1)):loop ในขณะที่ p1<255 และไม่ใช่ aso.EOS
วนซ้ำในขณะที่เป็นจริง
aso.อ่าน(3)
ret(0)=JPG
ret(2)=binval2(aso.อ่าน(2))
ret(1)=binval2(aso.อ่าน(2))
กรณีอื่น:
ถ้าซ้าย(Bin2Str(bFlag),2)=BM แล้ว
aso.อ่าน(15)
รีต(0)=BMP
ret(1)=binval(aso.อ่าน(4))
ret(2)=binval(aso.อ่าน(4))
อื่น
ซ้ำ(0)=
สิ้นสุดถ้า
สิ้นสุดการเลือก
ret(3)=ความกว้าง= & ret(1) & ความสูง=
& รีท(2)&
getimagesize=ret
สิ้นสุดฟังก์ชัน
จบคลาส
-
คัดลอกโค้ดด้านบนเพื่อสร้างไฟล์ GPS.asp เพื่อให้คลาสทั่วไปสำหรับรับขนาดภาพโดยไม่มีส่วนประกอบก็โอเค
2. รับเส้นทางรูปภาพ
เนื่องจากมีรูปภาพมากกว่าหนึ่งภาพ และรูปภาพเหล่านั้นจำเป็นต้องจัดเก็บไว้ในหมวดหมู่ เราจึงออกแบบฟิลด์ ImgURL ในฐานข้อมูลเพื่อจัดเก็บเส้นทางสัมพัทธ์ของรูปภาพ เราใส่รูปภาพที่อัพโหลดทั้งหมดไว้ในโฟลเดอร์ชื่อรูปภาพ (ฉันจะไม่ลงรายละเอียดเกี่ยวกับวิธีการอัพโหลดรูปภาพโดยไม่มีส่วนประกอบ) ขั้นแรกเราออกแบบหน้า ShowImg.asp เพื่อแสดงภาพขนาดย่อและข้อมูลที่เกี่ยวข้อง การออกแบบเฉพาะมีดังนี้:
รูปภาพ:
รูปแบบภาพ:
ขนาดภาพ:
ขนาดภาพ:
จำนวนคลิก:
ต่อไปเราจะได้เส้นทางที่สมบูรณ์ของภาพ รหัสมีดังนี้:
-
'////// รับเส้นทางที่แน่นอนของ ShowImg.asp//////
Dim curFile
curFile=Server.mappath(คำขอ.servervariables(PATH_INFO))
ชื่อไฟล์, ชื่อไฟล์
'////// เส้นทางสัมพันธ์กับรูปภาพ (เก็บไว้ในฐานข้อมูล)
cufilename=rs(ImgURL)
'//////เนื่องจาก ShowImg.asp อยู่ในไดเรกทอรีเดียวกันกับรูปภาพ เราจึงใช้ instrrev เพื่อรับเส้นทางของรูปภาพ//////
filename=left(curFile,instrrev(curFile,/))&cufilename
'////// สร้างเอนทิตีคลาส GPS//////
หรี่ GetPicSize
ตั้งค่า GetPicSize=GPS ใหม่
ตั้งค่า fs=Server.CreateObject (Scripting.FileSystemObject)
'////// รับประเภทรูปภาพ//////
Dim PicSuffixName
PicSuffixName=fs.GetExtensionName(ชื่อไฟล์)
Dim PD '//ขนาดภาพ
Dim Pความกว้าง,ความสูง
เลือกกรณีและปัญหา PicSuffixName
กรณี gif,bmp,jpg,png:
'//////เรียกใช้ฟังก์ชัน GetImageSize ในคลาสทั่วไปของ GPS เพื่อรับขนาดภาพ//////
PD=GetPicSize.GetImageSize(ชื่อไฟล์)
PWidth=PD(1) '//รับความกว้างของรูปภาพ
PHeight=PD(2) '//รับความสูงของรูปภาพ
กรณี swf
PD=GetPicSize.GetImageSize(ชื่อไฟล์)
PWidth=PD(1) '//รับความกว้างของแฟลช
PHeight=PD(2) '//รับความสูงของ Flash
กรณีอื่น
สิ้นสุดการเลือก
ตั้งค่า fs=ไม่มีอะไร
ตั้งค่า GetPicSize=ไม่มีอะไร
-
คัดลอกโค้ดด้านบนไปที่ด้านบนของ <body> เท่านี้ก็เรียบร้อย!
แน่นอนว่าบางคนจะบอกว่าคุณไม่จำเป็นต้องใช้ PATH_INFO เพื่อรับเส้นทาง คุณสามารถใช้ server.mappath() ได้โดยตรง ฮ่าๆ ทุกคนมีความชอบเป็นของตัวเอง เหตุผลหลักคือฉันสามารถใช้ PATH_INFO ได้ ตระหนักถึงฟังก์ชั่นบางอย่างของ FSO และการใช้งานเซิร์ฟเวอร์ .mappath() ใช้งานไม่ได้ ดังนั้นฉันจึงใช้สิ่งนี้ต่อไป
3. กำหนดขนาดภาพขนาดย่อ
รหัสส่วนนี้อยู่ในสายตาของผู้ดู และคนฉลาดมองเห็นปัญญา ขั้นแรก เราต้องระบุช่วงขนาดที่แสดงภาพขนาดย่อ เช่น 300X260 โค้ดสามารถเขียนได้ดังนี้:
-
หรี่ PXWidth, PXHeight
Dim Pp '//สัดส่วน
ถ้า PWidth=0 หรือ PWidth= จากนั้น
PXความกว้าง=0
PXความสูง=0
อื่น
Pp=FormatNumber(PWidth/PHeight,2) '//อัตราส่วนภาพ
สิ้นสุดถ้า
ถ้า PWidth>=PHeight แล้ว
ถ้า PWidth>=300 แล้ว
PXความกว้าง=300
PXHeight=FormatNumber(300/Pp,0)
อื่น
PXWidth=Pความกว้าง
PXHeight=พีความสูง
สิ้นสุดถ้า
อื่น
ถ้า PHeight>=260 แล้ว
PXความสูง=260
PXWidth=FormatNumber(260*Pp,0)
อื่น
PXWidth=Pความกว้าง
PXHeight=พีความสูง
สิ้นสุดถ้า
สิ้นสุดถ้า
-
เพียงเขียนโค้ดด้านบนทันทีหลังจากขั้นตอนที่สอง รหัสเมื่อโทรมีดังนี้:
<img src=<%=curfilename%> เส้นขอบ=0 ความกว้าง=<%=PXWidth%>
ความสูง=<%=PXความสูง%>>
ในส่วนของรูปแบบภาพนั้น สามารถใช้ <%=PicSuffixName%> เข้าไปได้ และขนาดภาพสามารถเขียนเป็น
-
ตอบกลับเขียน PXWidth&X&PXHeight
-
ขนาดรูปภาพสามารถทราบได้โดยใช้ FSO.GetFileSize(ชื่อไฟล์) และจำนวนการคลิกสามารถทำได้โดยใช้คำสั่ง SQL การเขียนโค้ดเฉพาะจะไม่ได้รับการอธิบายอีก
ด้วยวิธีนี้ จึงได้มีการเขียนโปรแกรมสร้างภาพขนาดย่อแบบไม่มีส่วนประกอบขึ้นมา มันอาจจะค่อนข้างยืมมาสักหน่อย แต่ตราบใดที่ทุกคนสามารถเชี่ยวชาญในวิธีการนี้ได้ ฉันเชื่อว่ามันจะพัฒนาขึ้นอย่างมาก