ปัจจุบันนี้มีการใช้โปรแกรมแก้ไข HTML บนเว็บกันอย่างแพร่หลายมากขึ้นเรื่อยๆ ในระบบข่าวและระบบบทความ อย่างไรก็ตาม ในระหว่างการใช้งาน หากลบรูปภาพที่วาง จะมีเครื่องหมาย "X" ขนาดใหญ่เหลืออยู่บนใบหน้า ซึ่งส่งผลต่อรูปลักษณ์ เมื่อก่อนฉันต้องบันทึกภาพนี้แล้วอัปโหลดขึ้นเซิร์ฟเวอร์อีกครั้งซึ่งยุ่งยากมาก เซิร์ฟเวอร์สามารถดาวน์โหลดรูปภาพ บันทึกบนเซิร์ฟเวอร์ และแทนที่ลิงก์บนเพจโดยอัตโนมัติได้หรือไม่ คำตอบคือใช่
จำเป็นต้องมีสามขั้นตอนเพื่อใช้ฟังก์ชันนี้:
1. รับที่อยู่ของภาพต้นฉบับ มีหลายวิธี คุณสามารถใช้การแยกสตริง หรือคุณสามารถใช้การจับคู่แบบปกติก็ได้ การปฏิบัติได้พิสูจน์แล้วว่าการจับคู่ปกตินั้นง่ายที่สุด ที่อยู่ของภาพที่วิเคราะห์จะถูกบันทึกไว้ในแท็ก <img> เราจะได้รับแท็กทั้งหมดนี้ก่อน กระบวนการมีดังนี้:
ตั้ง objRegExp = วัตถุการกำหนดค่า Regexp'set ใหม่
objRegExp.IgnoreCase = True'ไม่สนใจตัวพิมพ์
objRegExp.Global = True' ตั้งค่าเป็นการค้นหาข้อความแบบเต็ม
objRegExp.Pattern = "<img.+?>"'เพื่อให้แน่ใจว่าสามารถดึงที่อยู่รูปภาพได้อย่างถูกต้อง การกำหนดค่าจะถูกแบ่งออกเป็นสองระดับ: ขั้นแรกให้ค้นหาแท็ก <img> ภายใน จากนั้นจึงดึงที่อยู่รูปภาพ ข้างใน ฟังก์ชัน getimgs ด้านหลังถูกนำไปใช้งาน
strs=ตัดแต่ง(str)
ตั้งค่าการจับคู่ =objRegExp.Execute(strs)'เริ่มดำเนินการกำหนดค่า
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
RetStr = RetStr &getimgs( Match.Value )'ทำการจับคู่รอบที่สอง
รูปภาพทั้งหมดใน
Next
มี src="http://image address" ดังนั้นคุณจึงสามารถรับที่อยู่รูปภาพที่แน่นอนได้ดังนี้:
ฟังก์ชั่น getimgs (str)
รับรูปภาพ = ""
ตั้งค่า objRegExp = Regexp ใหม่
objRegExp.IgnoreCase = จริง
objRegExp.Global = จริง
objRegExp.Pattern = " http://.+?"""' นำที่อยู่ด้านในออก
ตั้งค่า mm=objRegExp.Execute(str)
สำหรับการแข่งขันแต่ละครั้งในหน่วย มม
getimgs=getimgs&"||"&left(Match.Value,len(Match.Value)-)' สตริงที่อยู่ภายในเพื่อใช้ในภายหลัง
ต่อไป
ฟังก์ชันสิ้นสุด
ได้รับที่อยู่ของรูปภาพทั้งหมดแล้ว และเราสามารถไปยังขั้นตอนที่สองได้
ประการที่สอง ดาวน์โหลดรูปภาพและบันทึกบนเซิร์ฟเวอร์ ซึ่งสามารถแบ่งออกเป็นสองขั้นตอน: ขั้นตอนหนึ่งคือการรับเนื้อหาของรูปภาพ และอีกขั้นตอนคือการบันทึกบนเซิร์ฟเวอร์ การรับเนื้อหาของรูปภาพทำได้ผ่านฟังก์ชันต่อไปนี้:
ฟังก์ชั่น getHTTPage(url)
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
http สลัว
ตั้งค่า http=server.createobject("MSXML.XMLHTTP")'ใช้วิธี xmlhttp เพื่อรับเนื้อหาของรูปภาพ
Http.open "GET",url,false
Http.ส่ง()
ถ้า Http.readystate<> แล้ว
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
getHTTPPage=Http.responseBody
ตั้งค่า http=nothing
ถ้า err.number<>0 แล้ว err.Clear
ฟังก์ชั่นสิ้นสุด
หลังจากได้รับเนื้อหาของรูปภาพแล้ว เราจำเป็นต้องบันทึกมัน ทำให้ผู้คนรู้สึกว่า FSO สามารถทำได้ แต่จริงๆ แล้วเป็นไปไม่ได้เลย ด้วยวิธีนี้ โปรแกรมบันทึกจะเกิดข้อผิดพลาดเนื่องจาก FSO ไม่รองรับการสตรีม ดังนั้นเราต้องเรียกวัตถุอื่น :ADO.STREM กระบวนการเฉพาะมีดังนี้:
ฟังก์ชั่นบันทึกภาพ (จาก, tofile)
geturl สลัว, objStream, imgs
geturl=ตัดแต่ง(จาก)
imgs=gethttppage(geturl)'กระบวนการรับเนื้อหาเฉพาะของรูปภาพ
ตั้งค่า objStream = Server.CreateObject("ADODB.Stream")' หากต้องการสร้างวัตถุ ADODB.Stream คุณต้องมี ADO หรือสูงกว่า
objStream.Type ='เปิดในโหมดไบนารี
objStream.เปิด
objstream.write imgs' เขียนเนื้อหาสตริงลงในบัฟเฟอร์
objstream.SaveToFile server.mappath(tofile),'-เขียนเนื้อหาที่บัฟเฟอร์ลงในไฟล์
objstream.Close()'ปิดวัตถุ
ตั้งค่า objstream=nothing
ฟังก์ชั่นสิ้นสุด
ดังนั้นเพียงใช้การวนซ้ำเพื่อบันทึกรูปภาพทั้งหมดในที่อยู่ที่เพิ่งได้รับ กระบวนการเฉพาะมีดังนี้:
arrimg=split(retstr,"||")'แยกสตริงและรับรายการที่อยู่ภายใน
ทั้งหมด =""
ใหม่ img = ""
สำหรับ i= ถึง ubound (arrimg)
ถ้า arrimg(i)<>"" และ instr(allimg,arrimg(i))< แล้ว' ตรวจสอบว่ารูปภาพนี้ถูกดาวน์โหลดแล้วหรือไม่
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)' เพื่อบันทึกที่อยู่ โปรดดูขั้นตอนข้างต้น
allimg=allimg&"||"&arrimg(i)' ร้อยที่อยู่ของรูปภาพที่บันทึกไว้เข้าด้วยกันเพื่อกำหนดที่อยู่ที่จะแทนที่
newimg=newimg&"||"&fname' สตริงที่อยู่ในเครื่องกลับเข้าด้วยกัน
สิ้นสุดถ้า
ต่อไป
ขั้นตอนที่สามคือการแทนที่ที่อยู่เดิม กระบวนการเฉพาะมีดังนี้:
arrnew=split(newimg,"||")'รับรายการที่อยู่รูปภาพต้นฉบับ
arrall=split(allimg,"||")'รับรายการที่อยู่ของรูปภาพที่บันทึกไว้
for i= to ubound(arrnew)' ดำเนินการวนซ้ำเพื่อแทนที่ที่อยู่เดิม
strs=แทนที่(strs,arrall(i),arrnew(i))
ต่อไป
กล้องวงจรปิด=strs
ต้องบอกว่ากระบวนการพื้นฐานของฟังก์ชันนี้เป็นเช่นนี้ แน่นอนว่าสามารถปรับเปลี่ยนเพื่อให้ได้ฟังก์ชันเพิ่มเติม เช่น การเพิ่มข้อจำกัดเกี่ยวกับขนาดรูปภาพ และเพิ่มข้อจำกัดในการดาวน์โหลดรูปภาพบนเครื่องท้องถิ่นเพื่อหลีกเลี่ยงการทำซ้ำ . ในเวลาเดียวกันควรสังเกตด้วยว่าข้อบกพร่องของฟังก์ชันนี้คือสามารถประมวลผลได้เฉพาะไฟล์รูปภาพคงที่และไม่สามารถใช้กับรูปภาพที่สร้างโดยโปรแกรมได้