هناك العديد من مكونات ASP على الإنترنت التي تنشئ صورًا مصغرة. إذا كانت مساحتك الافتراضية لا تدعم تسجيل مكونات جديدة، فقد تشعر أن موقع الويب الخاص بك قد فقد بريقه. أنا لست موهوبًا جدًا، لذا قمت بدمج الموارد عبر الإنترنت لكتابة برنامج لإنشاء صور مصغرة خالية من المكونات كمرجع فقط.
دعونا نلقي نظرة على الأساسيات أولا. أولاً نعلم أن كود عرض الصور في الصفحة هو كما يلي:
<img src=pic.gif border=0 width=300 height=260>
src هو مسار الصورة، ويتحكم الحد في عرض حافة الصورة، والعرض هو طول الصورة، والارتفاع هو ارتفاع الصورة. يتم في الواقع تغيير حجم الصور المصغرة إلى الحجم الأصلي. ولكن بشكل عام، من أجل تقليل التشوه، سوف نقوم بالقياس بشكل متناسب. لذلك، أصبح الحصول على أبعاد الصورة بالطول والعرض هو محور إنشاء الصور المصغرة.
فيما يلي خطوات كتابة إنشاء صور مصغرة خالية من المكونات:
1. الحصول على حجم الصورة بدون مكونات
منذ وقت ليس ببعيد، عندما تعلمت ASP لأول مرة، رأيت مقالًا يستخدم رمز ASCII للحصول على حجم الصورة بدون مكونات. في وقت لاحق، جربته ووجدت أنه لا يمكن عرض حجم صور jpg بشكل صحيح، وتحققت عبر الإنترنت ووجدت أن العديد من مواقع الويب أعادت طباعة هذا البرنامج، لكن لم يشر أحد إلى عيوب هذا البرنامج، ناهيك عن حل أوجه القصور حلها. لاحقًا، بحثت في Google مرة أخرى ووجدت أخيرًا مقالًا يقدم استخدام ADODB.stream للحصول على حجم الصورة وفقًا للطريقة المقدمة، وقمت بتعديل الكود بالداخل وجربته، والآن سأشاركه معك. :
استخدم ADODB.stream للحصول على الفئة العامة لحجم الصورة
<%
'///////////// GPS: احصل على حجم الصورة ///////////////
'////////////// استخدم ADODB.stream للحصول على حجم الصورة ///////////////
'/////////استشهد به ليون (心清) 11 أغسطس 2005 //////////
فئة جي بي اس
خافت أيضًا
فئة فرعية خاصة_تهيئة
تعيين aso=CreateObject(Adodb.Stream)
aso.Mode=3
aso.Type=1
aso.Open
نهاية الفرعية
فئة فرعية خاصة_إنهاء
تعيين aso=لا شيء
نهاية الفرعية
وظيفة خاصة Bin2Str(Bin)
خافت أنا، شارع
لأني=1 إلى LenB(Bin)
clow=MidB(بن، أنا، 1)
إذا AscB(clow)<128 إذن
Str = Str & Chr(ASCB(clow))
آخر
أنا=أنا+1
إذا كنت <= LenB(Bin) ثم Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))
endIf
التالي
Bin2Str = Str
وظيفة النهاية
وظيفة خاصة Num2Str(num,base,lens)
"نظام تحديد المواقع (2005/8/11)
متقاعد خافت
متقاعد =
بينما (الرقم> = القاعدة)
ret = (قاعدة تعديل الأسطوانات) & ret
num = (num - num mod base)/base
com.wind
Num2Str = يمين (سلسلة (عدسة، 0) ورقم & ret، عدسة)
وظيفة النهاية
الدالة الخاصة Str2Num(str,base)
"نظام تحديد المواقع (2005/8/11)"
متقاعد خافت
ريت = 0
لأني = 1 إلى لين (ستر)
ret = ret *base + cint(mid(str,i,1))
التالي
Str2Num=ret
وظيفة النهاية
وظيفة خاصة BinVal(bin)
"نظام تحديد المواقع (2002/8/11)
متقاعد خافت
ريت = 0
لأني = lenb(bin) إلى الخطوة 1 -1
ret = ret *256 + ascb(midb(bin,i,1))
التالي
BinVal=ret
وظيفة النهاية
وظيفة خاصة BinVal2(bin)
"نظام تحديد المواقع (2002/8/11)
متقاعد خافت
ريت = 0
لأني = 1 إلى lenb(bin)
ret = ret *256 + ascb(midb(bin,i,1))
التالي
BinVal2=ret
وظيفة النهاية
'///ما يلي هو رمز الاتصال///
الدالة getImageSize(filespec)
"نظام تحديد المواقع (2002/8/11)
خافت ريت (3)
aso.LoadFromFile(filespec)
bFlag=aso.read(3)
حدد الحالة السداسية (binVal (bFlag))
الحالة 4E5089:
أسو.قراءة(15)
ret(0)=PNG
ret(1)=BinVal2(aso.read(2))
أسو.قراءة(2)
ret(2)=BinVal2(aso.read(2))
الحالة 464947:
أسو.قراءة(3)
ret(0)=GIF
ret(1)=BinVal(aso.read(2))
ret(2)=BinVal(aso.read(2))
الحالة 535746:
أسو.قراءة(5)
binData=aso.Read(1)
sConv=Num2Str(ascb(binData),2,8)
nBits=Str2Num(left(sConv,5),2)
sConv = منتصف (sConv، 6)
بينما (لين (sConv) <nBits * 4)
binData=aso.Read(1)
sConv=sConv&Num2Str(ascb(binData),2,8)
com.wind
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:
يفعل
افعل: p1=binVal(aso.Read(1)): حلقة بينما p1=255 وليس aso.EOS
إذا كان p1>191 وp1<196، فاخرج، فافعل آخر aso.read(binval2(aso.Read(2))-2)
افعل:p1=binVal(aso.Read(1)):حلقة بينما p1<255 وليس aso.EOS
حلقة بينما صحيح
اسو.اقرأ(3)
ret(0)=JPG
ret(2)=binval2(aso.Read(2))
ret(1)=binval2(aso.Read(2))
حالة أخرى:
إذا ترك (Bin2Str(bFlag),2)=BM إذن
اسو.اقرأ(15)
ret(0)=BMP
ret(1)=binval(aso.Read(4))
ret(2)=binval(aso.Read(4))
آخر
إعادة (0) =
نهاية إذا
حدد النهاية
ret (3) = العرض = & ret (1) والارتفاع =
& اعتزال(2)&
getimagesize=ret
وظيفة النهاية
نهاية الفصل
%>
انسخ التعليمة البرمجية أعلاه لإنشاء ملف GPS.asp، بحيث تكون الفئة العامة للحصول على حجم الصورة بدون مكونات على ما يرام.
2. احصل على مسار الصورة
نظرًا لوجود أكثر من صورة واحدة ويجب تخزين الصور في فئات، فقد قمنا بتصميم حقل ImgURL في قاعدة البيانات لتخزين المسار النسبي للصورة. نضع جميع الصور التي تم تحميلها في مجلد يسمى الصور (لن أخوض في تفاصيل حول كيفية تحميل الصور بدون مكونات). الآن نقوم أولاً بتصميم صفحة ShowImg.asp لعرض الصور المصغرة والمعلومات ذات الصلة. التصميم المحدد هو كما يلي:
صورة:
تنسيق الصورة:
حجم الصورة:
حجم الصورة:
عدد النقرات:
بعد ذلك، نحصل على المسار المطلق للصورة. الرمز هو كما يلي:
<%
'/////احصل على المسار المطلق لـ ShowImg.asp/////
خافت curFile
curFile=Server.mappath(Request.servervariables(PATH_INFO))
اسم الملف المنحني الخافت، اسم الملف
'///// المسار النسبي للصورة (المخزنة في قاعدة البيانات)
cufilename=rs(ImgURL)
'///// نظرًا لأن ShowImg.asp موجود في نفس دليل الصور، فإننا نستخدم instrrev للحصول على مسار الصور/////
filename=left(curFile,instrrev(curFile,/))&cufilename
'/////إنشاء كيان فئة GPS/////
خافت GetPicSize
اضبط GetPicSize=نظام تحديد المواقع العالمي (GPS) الجديد
تعيين fs=Server.CreateObject(Scripting.FileSystemObject)
'/////احصل على نوع الصورة /////
خافت PicSuffixName
PicSuffixName=fs.GetExtensionName(اسم الملف)
خافت PD '//أبعاد الصورة
عرض خافت، ارتفاع
حدد اسم PicSuffixName للحالة
الحالة gif,bmp,jpg,png:
'/////استدعاء وظيفة GetImageSize في فئة GPS العامة للحصول على حجم الصورة /////
PD=GetPicSize.GetImageSize(اسم الملف)
PWidth=PD(1) '//احصل على عرض الصورة
PHeight=PD(2) '//احصل على ارتفاع الصورة
حالة فرنك سويسري
PD=GetPicSize.GetImageSize(اسم الملف)
PWidth=PD(1) '//احصل على عرض الفلاش
PHeight=PD(2) '//احصل على ارتفاع الفلاش
حالة أخرى
إنهاء التحديد
تعيين خ = لا شيء
تعيين GetPicSize = لا شيء
%>
انسخ الكود أعلاه إلى الجزء العلوي من <body> ولا بأس!
بالطبع، سيقول بعض الأشخاص أنه ليس من الضروري استخدام PATH_INFO للحصول على المسار، يمكنك فقط استخدام server.mappath() مباشرة. هاها، والسبب الرئيسي هو أنه يمكنني استخدام PATH_INFO أدركت أن بعض وظائف FSO واستخدمت server.mappath() ولم تنجح، لذلك واصلت استخدام هذا.
3. تحديد حجم الصورة المصغرة
وهذا الجزء من الكود موجود في عين الناظر، والحكماء يرون الحكمة. أولاً، نحتاج إلى تحديد نطاق حجم عرض الصورة المصغرة، على سبيل المثال: 300X260، ويمكن كتابة الكود على النحو التالي:
<%
خافت عرض PX، ارتفاع PX
خافت ص '//نسبة
إذا كان PWidth=0 أو PWidth= إذن
عرض بكسل = 0
ارتفاع بكسل = 0
آخر
Pp=FormatNumber(PWidth/PHeight,2) '//نسبة العرض إلى الارتفاع
نهاية إذا
إذا كان PWidth>=PHeight إذن
إذا كان PWidth> = 300 ثم
عرض بكسل = 300
PXHeight=FormatNumber(300/Pp,0)
آخر
PXWidth=PWidth
PXHeight=PHeight
نهاية إذا
آخر
إذا كان PHeight> = 260 ثم
ارتفاع البكسل = 260
PXWidth=رقم التنسيق(260*ص,0)
آخر
PXWidth=PWidth
PXHeight=PHeight
نهاية إذا
نهاية إذا
%>
فقط قم بكتابة الكود أعلاه مباشرة بعد الخطوة الثانية. الرمز عند الاتصال هو كما يلي:
<img src=<%=curfilename%> الحدود=0 العرض=<%=PXWidth%>
الارتفاع=<%=PXHeight%>>
أما بالنسبة لتنسيق الصورة فيمكنك استخدام <%=PicSuffixName%> للحصول عليها ويمكن كتابة حجم الصورة كما يلي
<%
الاستجابة.اكتب PXWidth&X&PXHeight
%>
يمكن تحقيق حجم الصورة باستخدام FSO.GetFileSize(filename)، ويمكن تحقيق عدد النقرات ببساطة باستخدام عبارات SQL. لن يتم وصف الترميز المحدد مرة أخرى.
بهذه الطريقة، تمت كتابة برنامج لإنشاء صور مصغرة خالية من المكونات، وقد يكون مستعارًا بعض الشيء، ولكن طالما أن الجميع يستطيعون إتقان الطريقة، أعتقد أنه سيتم تحسينها بشكل كبير.