การคัดลอกรหัสมีดังนี้:
<! doctype html public "-// w3c // dtd xhtml 1.0 transitional // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "content-type" content = "text /html; charset = gb2312" />
<style>
Body {padding-left: 75px; พื้นหลังสี: สีเบจ}
</style>
<script>
-
// base64 การถอดรหัสภาพ GIF ที่เข้ารหัส
// โดย mozart0
// 2005/10/29
-
// สร้างวัตถุของคลาส GIF
// คลาส GIF ถูกกำหนดภายในในฟังก์ชันนี้
// str64: สตริงที่เข้ารหัส Base64 ของไฟล์ gif
// ส่งคืนวัตถุ GIF ที่สร้างขึ้นสำเร็จ
// return null หากล้มเหลว
ฟังก์ชั่น getgif (str64) {
var bytes = decodeBase64 (str64);
ถ้า (! ไบต์) {
การแจ้งเตือน ("ข้อผิดพลาด: การเข้ารหัส base64 ไม่ถูกต้อง");
คืนค่า null;
-
var gif = ใหม่ gif ();
สำหรับ (var i = 0; i <6; i ++)
gif.version+= string.fromCharcode (ไบต์ [i]);
if (gif.version.slice (0,3)! = "gif") {
การแจ้งเตือน ("ข้อผิดพลาด: รูปแบบภาพที่ไม่ใช่ GIF");
คืนค่า null;
-
gif.width = bytes [i] | (ไบต์ [i+1] << 8);
gif.height = bytes [i+2] | (ไบต์ [i+3] << 8);
var f = ไบต์ [i+4];
gif.ColorResolution = (f >> 4 & 0x7) +1;
gif.sorted = (f & 0x8)? true: false;
gif.backgroundIndex = 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) {
การแจ้งเตือน ("ข้อผิดพลาด: ไม่พบข้อมูลภาพ");
คืนค่า null;
-
var f = new gif_frame ();
ถ้า (! GetSingleFrame (i, f))
คืนค่า null;
อื่น
gif.frames.push (f);
-
อื่น{
i = j;
ทำ{
var f = new gif_frame ();
var t = getSingleFrame (i, f);
ถ้า (! t)
คืนค่า null;
gif.frames.push (f);
สำหรับ (i+= t; i <bytes.length; i ++)
if (bytes [i] == 0x21 && bytes [i+1] == 0xf9)
หยุดพัก;
-
ในขณะที่ (i <bytes.length);
-
กลับมา gif;
// กระบวนการภายในสร้างตารางสี
ฟังก์ชั่น getPalette (pos, s, d, len) {
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, frame) {
var i = pos;
if (bytes [i] == 0x21) {
i+= 3;
ถ้า (ไบต์ [i] & 1)
frame.transparentIndex = bytes [i+3];
frame.delay = bytes [i+1] | (ไบต์ [i+2] << 8);
สำหรับ (i+= 5; i <bytes.length && bytes [i]! = 0x2c; i ++);
if (i == bytes.length) {
การแจ้งเตือน ("ข้อผิดพลาด: ไม่พบตัวระบุภาพ");
กลับ 0;
-
-
frame.offsetx = bytes [i+1] | (ไบต์ [i+2] << 8);
frame.offsety = bytes [i+3] | (ไบต์ [i+4] << 8);
frame.width = bytes [i+5] | (ไบต์ [i+6] << 8);
frame.height = bytes [i+7] | (ไบต์ [i+8] << 8);
var f = ไบต์ [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);
-
อื่น{
Frame.ColorResolution = GIF.ColorResolution;
frame.localpalette = gif.globalpalette;
-
var lzwlen = bytes [i ++]+1;
i+= getBlock (i, bytes, frame.data);
frame.data = decodelzw (frame.data, lzwlen);
Return frame.data?i-pos:0;
-
// กำหนดโครงสร้างข้อมูลสำหรับการจัดเก็บไฟล์ GIF
// ให้วิธีการ showinfo, ส่งคืนข้อมูลรูปภาพ
ฟังก์ชั่น gif () {
this.version = "";
this.width = 0;
this.height = 0;
this.colorresolution = 0;
this.sorted = false;
this.globalpalette = null;
this.backgroundIndex = -1;
this.pixelaspectradio = 0;
this.frames = [];
this.showInfo = function (SEP) {// แสดงข้อมูลภาพ, SEP เป็นตัวคั่นบรรทัด
ถ้า (! ก.ย. )
ก.ย. = "/n";
var s = "ข้อมูล GIF:"+ก.ย.+"----------------------------------- ------------------------------------------------------ -----------------------
s+= subinfo (นี่)+ก.ย. ;
สำหรับ (var i = 0; i <this.frames.length; i ++)
S+= Sep+"Frames"+I+"------------------------------------- ------------------------------------------------------ ---------------------
กลับ s;
ฟังก์ชั่น subinfo (o) {
var s = "";
สำหรับ (var i ใน o) {
if (i == "showinfo" || i == "draw")
ดำเนินการต่อ;
S+= SEP+I+":";
if (typeof (o [i]) == "Object")
s+= (o [i]? o [i]. ความยาว: "null");
อื่น
s+= o [i];
-
กลับ s;
-
-
-
// กำหนดโครงสร้างข้อมูลที่เก็บเฟรมของภาพ
// จัดเตรียมวิธีการวาดรูปวาด
ฟังก์ชั่น gif_frame () {
this.offsetx = 0;
this.offsety = 0;
this.width = 0;
this.height = 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*ซูม;
if (parent.clientheight <this.height*zoom)
parent.style.height = this.height*ซูม;
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 = "สัมบูรณ์";
var t = document.createElement ("div");
t.style.overflow = "ซ่อน";
t.style.position = "สัมบูรณ์";
deflayout (this.data, this.localpalette, this.width, this.height, img, t, zoom);
ลบ t;
-
-
-
// การถอดรหัส Base64
// strin ป้อนสตริง
// ผลตอบแทนที่ประสบความสำเร็จของอาร์เรย์แต่ละองค์ประกอบมีข้อมูลหนึ่งไบต์
// return null หากล้มเหลว
ฟังก์ชัน decodeBase64 (strin) {
if (! strin.length || strin.length%4)
คืนค่า null;
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);
-
ถ้า (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 เป็นข้อมูลต้นฉบับ nbits คือจำนวนเริ่มต้นของบิตรหัส
// ส่งคืนอาร์เรย์ให้สำเร็จแต่ละองค์ประกอบมีดัชนีสี
// return null หากล้มเหลว
ฟังก์ชั่น 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;
-
รหัส = อุณหภูมิ & หน้ากาก [BC];
tleft- = bc;
อุณหภูมิ >> = BC;
if (code == eoi)
หยุดพัก;
if (code == cc) {
table.length = cc+2;
bc = nbits;
เก่า = รหัส;
ดำเนินการต่อ;
-
var t = "";
if (code <table.length) {
t = ตาราง [รหัส];
ถ้า (เก่า! = cc)
table.push (ตาราง [เก่า]+t.slice (0,3));
-
อื่นถ้า (เก่า <table.length) {
t = ตาราง [เก่า]+ตาราง [เก่า] .slice (0,3);
table.push (t);
-
อื่น{
การแจ้งเตือน ("ข้อผิดพลาด: ข้อมูลภาพไม่ถูกต้อง");
คืนค่า null;
-
เก่า = รหัส;
สำหรับ (var i = 0; i <t.length; i+= 3)
result.push (ParseInt (T.Substr (i, 3), 16))
if (table.length == 1 << bc && bc <12)
BC ++;
-
ผลการกลับมา;
-
// วาดด้วย DIV ขั้นต่ำตามโครงร่างข้อมูลอาร์เรย์ไบต์
ฟังก์ชั่น deflayout (ข้อมูล, จานสี, ความกว้าง, ความสูง, ภาพ, บล็อก, ซูม) {
var map = อาร์เรย์ใหม่ (ความสูง);
สำหรับ (var i = 0; i <ความสูง; 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 <ความสูง; i ++)
สำหรับ (j = 0; j <width;) {
if (map [i] [j] == 0x100) {
J ++;
ดำเนินการต่อ;
-
c = map [i] [j];
สำหรับ (i1 = i+1; i1 <ความสูง && แผนที่ [i1] [j] == c; i1 ++);
สำหรับ (j1 = j+1; j1 <width; j1 ++) {
สำหรับ (i2 = i; i2 <i1 && แผนที่ [i2] [j1] == c; i2 ++);
ถ้า (i2 <i1)
หยุดพัก;
-
สำหรับ (i2 = i; i2 <i1; i2 ++)
สำหรับ (j2 = j; j2 <j1; j2 ++)
แผนที่ [i2] [J2] = 0x100;
var x = block.clonenode (จริง);
x.style.left = j*ซูม;
x.style.top = i*ซูม;
x.style.width = (j1-j)*ซูม;
x.style.height = (i1-i)*ซูม;
x.style.backgroundColor = Palette [C];
image.appendchild (x);
J = J1;
-
-
</script>
<script>
ฟังก์ชั่นหลัก () {
var t = วันที่ใหม่ (). getTime ();
var xmldom = document.getElementById ("imgdata");
var gif = getgif ("r0lgodlhdwapakecaaaazmzm //////////aaacwaaaadwapaaaciispeqhsrz5modrlln48cxf8m2iq3ymmkqvlrtw4mlwwach+h09wdgltdgltxpdgltxfltx Qaaow == ");
var info = document.getElementById ("ข้อมูล");
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"> </div>
<Hr>
<div id = "info"> หน้ากำลังโหลดโปรดรอ ... </div>
</body>
</html>
PS: นี่คือเครื่องมือรูปภาพออนไลน์สำหรับการอ้างอิงของคุณ
การแปลงภาพเป็น 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
ไอคอนไอคอนเครื่องมือสร้างออนไลน์:
http://tools.vevb.com/aideddesign/ico_img
สิ่งที่แนบมา: นอกจากนี้ยังแนะนำให้ใช้เครื่องมือการแปลงการเข้ารหัส Base64
BASE64 เครื่องมือเข้ารหัสและถอดรหัส:
http://tools.vevb.com/transcoding/base64