نسخة الكود كما يلي:
<! doctype html public "-// w3c // dtd xhtml 1.0 transitional // en"
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "content-type" content = "text /html ؛ charset = gb2312" />
<style>
الجسم {padding-left: 75px ؛ خلفية اللون: beige}
</style>
<script>
////////////////////////////////////////////////////////////// /////////////////////
// base64 فك تشفير صورة GIF المشفرة
// بواسطة Mozart0
// 2005/10/29
/////////////////////////////////////////////////
// إنشاء كائن من فئة GIF
// يتم تعريف GIF الفئة داخليًا في هذه الوظيفة
// str64: سلسلة مشفرة من ملف GIF
// أعاد بنجاح كائن GIF الذي تم إنشاؤه
// إرجاع فارغ إذا فشل
وظيفة getGif (str64) {
var bytes = decodeBase64 (str64) ؛
إذا (! بايت) {
التنبيه ("خطأ: ترميز BASE64 غير صالح") ؛
العودة لاغية.
}
var gif = new gif () ؛
لـ (var i = 0 ؛ i <6 ؛ i ++)
gif.version+= string.fromcharcode (bytes [i]) ؛
if (gif.version.slice (0،3)! = "GIF") {
تنبيه ("خطأ: تنسيق صورة غير GIF") ؛
العودة لاغية.
}
gif.width = bytes [i] | (bytes [i+1] << 8) ؛
gif.Height = bytes [i+2] | (bytes [i+3] << 8) ؛
var f = bytes [i+4] ؛
gif.colorresolution = (f >> 4 & 0x7) +1 ؛
gif.sorted = (f & 0x8)؟ True: false ؛
gif.backgroundEx = bytes [i+5] ؛
gif.pixelaspectradio = bytes [i+6] ؛
if (f & 0x80) {
gif.globalpalette = [] ؛
i+= getPalette (i+7 ، bytes ، gif.globalpalette ، 2 << (f & 0x7)) ؛
}
i+= 7 ؛
لـ (var j = i ؛ j <bytes.length ؛ j ++)
if (bytes [j] == 0x21 && bytes [j+1] == 0xf9)
استراحة؛
if (j == bytes.length) {
لـ (؛ i <bytes.length ؛ i ++)
if (bytes [i] == 0x2c)
استراحة؛
if (i == bytes.length) {
تنبيه ("خطأ: بيانات الصورة غير موجودة") ؛
العودة لاغية.
}
var f = new gif_frame () ؛
إذا (! getingleframe (i ، f))
العودة لاغية.
آخر
gif.frames.push (f) ؛
}
آخر{
أنا = ي ؛
يفعل{
var f = new gif_frame () ؛
var t = getSingleFrame (i ، f) ؛
إذا (! ر)
العودة لاغية.
gif.frames.push (f) ؛
لـ (i+= t ؛ i <bytes.length ؛ i ++)
if (bytes [i] == 0x21 && bytes [i+1] == 0xf9)
استراحة؛
}
بينما (أنا <bytes.length) ؛
}
إرجاع GIF ؛
// العملية الداخلية ، وإنشاء جدول ألوان
وظيفة getPalette (POS ، S ، D ، Len) {
لين*= 3 ؛
لـ (var i = pos ؛ i <pos+len ؛ i+= 3)
d.push ('#'+(s [i] <= 0xf؟ "0": "")+s [i] .toString (16)
+(s [i+1] <= 0xf؟ "0": "")+s [i+1] .ToString (16)
+(s [i+2] <= 0xf؟ "0": "")+s [i+2] .ToString (16)) ؛
إرجاع لين.
}
// العملية الداخلية ، دمج شرائح البيانات
وظيفة getBlock (POS ، S ، D) {
var p = pos ؛
بينما (len = s [p ++]) {
لـ (var i = 0 ؛ i <len ؛ i ++)
d.push (s [p+i]) ؛
P+= LEN ؛
}
إرجاع P-Pos ؛
}
// العملية الداخلية ، الحصول على إطار من البيانات
وظيفة getSingleFrame (pos ، الإطار) {
var i = pos ؛
if (bytes [i] == 0x21) {
i+= 3 ؛
إذا (بايت [i] & 1)
frame.transparentIndex = bytes [i+3] ؛
frame.delay = bytes [i+1] | (bytes [i+2] << 8) ؛
لـ (i+= 5 ؛ i <bytes.length && bytes [i]! = 0x2c ؛ i ++) ؛
if (i == bytes.length) {
تنبيه ("خطأ: معرف الصورة غير موجود") ؛
العودة 0 ؛
}
}
frame.offsetx = bytes [i+1] | (bytes [i+2] << 8) ؛
frame.offsety = bytes [i+3] | (bytes [i+4] << 8) ؛
frame.width = bytes [i+5] | (bytes [i+6] << 8) ؛
Frame.Height = bytes [i+7] | (bytes [i+8] << 8) ؛
var f = bytes [i+9] ؛
i+= 10 ؛
إذا (F & 0x40)
Frame.Interlace = true ؛
إذا (F & 0x20)
frame.sorted = true ؛
if (f & 0x80) {
frame.colorresolution = (f & 0x7) +1 ؛
frame.localpalette = [] ؛
i+= getPalette (i ، bytes ، frame.localpalette ، 1 << frame.colorresolution) ؛
}
آخر{
fram.colorresolution = gif.colorresolution ؛
fram.localpalette = gif.globalpalette ؛
}
var lzwlen = bytes [i ++]+1 ؛
i+= getBlock (i ، bytes ، frame.data) ؛
frame.data = decodelzw (frame.data ، lzwlen) ؛
إرجاع Frame.Data؟i-pos:0 ؛
}
// تحديد بنية البيانات لتخزين ملفات GIF
// توفير طريقة العرض ، إرجاع معلومات الصورة
وظيفة GIF () {
this.version = "" ؛
this.width = 0 ؛
هذا
this.colorresolution = 0 ؛
هذا.
this.globalpalette = null ؛
this.backgroundex = -1 ؛
this.pixelaspectradio = 0 ؛
This.frames = []
this.showInfo = function (sep) {// show information fiction ، sep هو فاصل الخط
إذا (! سبتمبر)
sep = "/n" ؛
var s = "معلومات GIF:"+SEP+"------------------------------------- ------------------------------------------------- ---------------------
s+= subinfo (this)+sep ؛
لـ (var i = 0 ؛ i <this.frames.length ؛ i ++)
S+= SEP+"إطارات"+I+"-------------------------------------------- ------------------------------------------------- -------------------
العودة s ؛
وظيفة subinfo (o) {
var s = "" ؛
لـ (var i in o) {
إذا (i == "showInfo" || i == "draw")
يكمل؛
s+= sep+i+":" ؛
إذا (typeof (o [i]) == "كائن")
s+= (o [i]؟ o [i] .length: "null") ؛
آخر
s+= o [i] ؛
}
العودة s ؛
}
}
}
// حدد بنية البيانات التي تخزن إطارًا من الصور
// توفير طريقة الرسم ، الرسم
وظيفة gif_frame () {
this.offsetx = 0 ؛
this.offsety = 0 ؛
this.width = 0 ؛
هذا
this.localpalette = null ؛
this.colorresolution = 0 ؛
this.interlace = false ؛
this.sorted = false
this.data = []
this.transparentIndex = -1 ؛
this.delay = 0 ؛
this.draw = function (Parent ، Zoom) {
إذا (! this.data.length)
يعود؛
إذا (! الوالد)
Parent = document.body ؛
إذا (! التكبير)
التكبير = 1 ؛
if (parent.clientwidth <this.width*Zoom)
parent.style.width = this.width*Zoom ؛
if (parent.clientheight <this.height*Zoom)
parent.style.height = this.height*Zoom ؛
var id = "imgDefaultDraw" ؛
var img = document.getElementById (id) ؛
إذا (IMG)
حذف parent.removechild (IMG) ؛
img = document.createElement ("div") ؛
img.id = id ؛
Parent.AppendChild (IMG) ؛
img.style.position = "absolute" ؛
var t = document.createElement ("div") ؛
T.Style.Overflow = "Hidden" ؛
T.Style.position = "absolute" ؛
deflayout (this.data ، this.localpalette ، this.width ، this.height ، img ، t ، Zoom) ؛
حذف T ؛
}
}
}
// base64 فك التشفير
// سترين ، أدخل السلسلة
// عودة ناجحة لمجموعة ، كل عنصر يحتوي على بايت واحد من المعلومات
// إرجاع فارغ إذا فشل
دالة decodeBase64 (strin) {
if (! strin.length || strin.length ٪ 4)
العودة لاغية.
var str64 =
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=" ؛
var index64 = [] ؛
لـ (var i = 0 ؛ i <str64.length ؛ i ++)
index64 [str64.charat (i)] = i ؛
var c0 ، c1 ، c2 ، c3 ، b0 ، b1 ، b2 ؛
var len = strin.length ؛
var len1 = len ؛
if (strin.charat (len-1) == '=')
LEN1- = 4 ؛
var result = [] ؛
لـ (var i = 0 ، j = 0 ؛ i <len1 ؛ i+= 4) {
c0 = index64 [strin.charat (i)] ؛
C1 = index64 [strin.charat (i+1)] ؛
C2 = index64 [strin.charat (i+2)] ؛
C3 = index64 [strin.charat (i+3)] ؛
B0 = (C0 << 2) | (C1 >> 4) ؛
B1 = (C1 << 4) | (C2 >> 2) ؛
B2 = (C2 << 6) | C3 ؛
result.push (b0 & 0xff) ؛
result.push (b1 & 0xff) ؛
result.push (b2 & 0xff) ؛
}
if (len1! = len) {
c0 = index64 [strin.charat (i)] ؛
C1 = index64 [strin.charat (i+1)] ؛
c2 = strin.charat (i+2) ؛
B0 = (C0 << 2) | (C1 >> 4) ؛
result.push (b0 & 0xff) ؛
if (c2! = '=') {
C2 = index64 [C2] ؛
B1 = (C1 << 4) | (C2 >> 2) ؛
result.push (b1 & 0xff) ؛
}
}
نتيجة العودة
}
// وظيفة فك تشفير LZW لـ GIF
// Arrbytes هي بيانات المصدر ، NBITات هي العدد الأولي للبتات المشفرة
// أعيد الصفيف بنجاح ، يتضمن كل عنصر فهرس ملون
// إرجاع فارغ إذا فشل
دالة decodelzw (arrbytes ، nbits) {
var cc = 1 << (nbits-1) ؛
var eoi = cc+1 ؛
var table = [] ، mask = [] ، result = [] ؛
لـ (var i = 0 ؛ i <cc ؛ i ++)
الجدول [i] = (i >> 8 & 0xf) .ToString (16)
+(i >> 4 & 0xf) .ToString (16)+(i & 0xf) .ToString (16) ؛
لـ (i = 2 ، قناع [1] = 1 ؛ i <13 ؛ i ++)
قناع [i] = قناع [i-1] << 1 | 1 ؛
var bc = nbits ؛
var pos = 0 ، temp = 0 ، tleft = 0 ، code = 0 ، old = 0 ؛
بينما (صحيح) {
بينما (tleft <bc) {
temp = temp | (arrbytes [pos ++] << tleft) ؛
tleft+= 8 ؛
}
الكود = temp & mask [bc] ؛
tleft- = قبل الميلاد ؛
درجة الحرارة >> = قبل الميلاد ؛
إذا (رمز == eoi)
استراحة؛
if (code == cc) {
table.length = cc+2 ؛
قبل الميلاد = nbits ؛
القديم = الكود ؛
يكمل؛
}
var t = "" ؛
if (رمز <table.length) {
t = الجدول [رمز] ؛
إذا (قديم! = CC)
table.push (table [old]+t.slice (0،3)) ؛
}
آخر إذا (قديم <table.length) {
t = table [old]+table [old] .slice (0،3) ؛
table.push (t) ؛
}
آخر{
تنبيه ("خطأ: بيانات صورة غير صالحة") ؛
العودة لاغية.
}
القديم = الكود ؛
لـ (var i = 0 ؛ i <t.length ؛ i+= 3)
result.push (parseint (T.Substr (i ، 3) ، 16))
if (table.length == 1 << bc && bc <12)
قبل الميلاد ++ ؛
}
نتيجة العودة
}
// ارسم مع الحد الأدنى من DIV وفقًا لتخطيط بيانات صفيف البايت
وظيفة deflayout (البيانات ، لوحة ، عرض ، ارتفاع ، صورة ، كتلة ، تكبير) {
خريطة var = صفيف جديد (الارتفاع) ؛
لـ (var i = 0 ؛ i <height ؛ i ++) {
خريطة [i] = صفيف جديد (العرض) ؛
لـ (var j = 0 ؛ j <width ؛ j ++)
خريطة [i] [j] = data [i*width+j] ؛
}
var i ، j ، i1 ، i2 ، j1 ، j2 ، c ؛
لـ (i = 0 ؛ i <height ؛ i ++)
لـ (j = 0 ؛ j <width ؛) {
if (map [i] [j] == 0x100) {
J ++ ؛
يكمل؛
}
C = الخريطة [i] [j] ؛
لـ (i1 = i+1 ؛ i1 <height && map [i1] [j] == c ؛ i1 ++) ؛
لـ (j1 = j+1 ؛ j1 <width ؛ j1 ++) {
لـ (i2 = i ؛ i2 <i1 && map [i2] [j1] == c ؛ i2 ++) ؛
إذا (i2 <i1)
استراحة؛
}
لـ (i2 = i ؛ i2 <i1 ؛ i2 ++)
لـ (J2 = J ؛ J2 <J1 ؛ J2 ++)
الخريطة [i2] [J2] = 0x100 ؛
var x = block.clonenode (true) ؛
X.Style.Left = j*Zoom ؛
x.style.top = i*Zoom ؛
X.Style.Width = (J1-J)*Zoom ؛
x.style.height = (i1-i)*Zoom ؛
x.style.backgroundColor = palette [c] ؛
Image.AppendChild (X) ؛
J = J1 ؛
}
}
</script>
<script>
وظيفة main () {
var t = date date (). getTime () ؛
var xmldom = document.getElementById ("imgdata") ؛
var gif = getGif ("r0lgodlhdwapakeCaaaazmzm //////aaacwaaadwapaaaciispeqhsrz5modrlln48cxf8m2iq3mkqvlrtw4mlwwwach+ Qaaow == ") ؛
var info = document.getElementById ("info") ؛
info.innerhtml = gif.showinfo ("<br>") ؛
t = تاريخ جديد (). getTime () ؛
gif.frames [0] .draw (document.getElementById ("canvas") ، 1) ؛
info.innerhtml+= "<br> وقت الرسم"+(تاريخ جديد (). getTime ()-t)+"MS" ؛
}
</script>
<body onload = "main ()">
<div id = "canvas"> </viv>
<hr>
<div id = "info"> الصفحة يتم تحميلها ، يرجى الانتظار ... </div>
</body>
</html>
ملاحظة: إليك بعض أدوات الصور عبر الإنترنت للرجوع إليها
تحويل الصورة إلى Base64 ترميز أداة عبر الإنترنت:
http://tools.vevb.com/transcoding/img2base64
أداة إنشاء أيقونة البريد الإلكتروني عبر الإنترنت:
http://tools.vevb.com/email/emaillogo
أداة معالجة صور PS عبر الإنترنت:
http://tools.vevb.com/aideddesign/webps
أداة تحويل تنسيق الصورة عبر الإنترنت (JPG/BMP/GIF/PNG):
http://tools.vevb.com/aideddesign/picext
أداة توليد أيقونة ICO:
http://tools.vevb.com/aideddesign/ico_img
المرفق: بالإضافة إلى ذلك ، يوصى باستخدام أداة تحويل ترميز BASE64
BASE64 أداة الترميز وفك التشفير:
http://tools.vevb.com/transcoding/base64