La copie de code est la suivante:
<! 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">
<adal>
<meta http-equiv = "content-type" content = "text / html; charset = gb2312" />
<style>
corps {padding-left: 75px; fond-couleur: beige}
</ style>
<cript>
////////////////////////////////////////////////////////////////////////// / ///////////////////
// Décodage d'image GIF codé de base64
// par Mozart0
// 2005/10/29
/////////////////////////////////////////////////////////////////////// /
// Créer un objet de classe GIF
// Le GIF de classe est défini en interne dans cette fonction
// str64: chaîne codée de base64 de fichier GIF
// a renvoyé avec succès l'objet GIF créé
// retourner null en cas d'échec
fonction getgif (str64) {
var octets = decodeBase64 (str64);
if (! octets) {
alert ("Erreur: codage de base64 non valide");
retourner null;
}
var gif = new gif ();
pour (var i = 0; i <6; i ++)
gif.version + = string.fromCharcode (bytes [i]);
if (gif.version.slice (0,3)! = "gif") {
alert ("Erreur: format d'image non GIF");
retourner null;
}
gif.width = octets [i] | (octets [i + 1] << 8);
gif.height = bytes [i + 2] | (octets [i + 3] << 8);
var f = octets [i + 4];
gif.colorresolution = (f >> 4 & 0x7) +1;
gif.sorted = (f & 0x8)? true: false;
gif.backgroundIndex = octets [i + 5];
gif.Pixelaspeclectradio = bytes [i + 6];
if (f & 0x80) {
gif.globalpalette = [];
i + = getPalette (i + 7, octets, gif.globalpalette, 2 << (f & 0x7));
}
i + = 7;
pour (var j = i; j <bytes.length; j ++)
if (bytes [j] == 0x21 && bytes [j + 1] == 0xf9)
casser;
if (j == bytes.length) {
pour (; i <bytes.length; i ++)
if (octets [i] == 0x2c)
casser;
if (i == bytes.length) {
alert ("Erreur: données d'image introuvables");
retourner null;
}
var f = new gif_frame ();
if (! getingingleframe (i, f))
retourner null;
autre
gif.frames.push (f);
}
autre{
i = j;
faire{
var f = new gif_frame ();
var t = getSingleFrame (i, f);
si (! t)
retourner null;
gif.frames.push (f);
for (i + = t; i <bytes.length; i ++)
if (bytes [i] == 0x21 && octets [i + 1] == 0xf9)
casser;
}
while (i <bytes.length);
}
Retour GIF;
// Processus interne, générer une table de couleur
fonction getpalette (pos, s, d, len) {
len * = 3;
pour (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));
retour Len;
}
// Processus interne, intégrant les segments de données
fonction getblock (pos, s, d) {
var p = pos;
while (len = s [p ++]) {
pour (var i = 0; i <len; i ++)
d.push (s [p + i]);
p + = len;
}
retour P-POS;
}
// Processus interne, obtenez un cadre de données
fonction getSingleFrame (pos, trame) {
var i = pos;
if (bytes [i] == 0x21) {
i + = 3;
if (octets [i] & 1)
frame.transparentIndex = octets [i + 3];
frame.delay = bytes [i + 1] | (octets [i + 2] << 8);
for (i + = 5; i <bytes.length && bytes [i]! = 0x2c; i ++);
if (i == bytes.length) {
alert ("Erreur: identifiant d'image introuvable");
retour 0;
}
}
frame.offsetx = bytes [i + 1] | (octets [i + 2] << 8);
frame.offSety = bytes [i + 3] | (octets [i + 4] << 8);
frame.width = octets [i + 5] | (octets [i + 6] << 8);
frame.height = bytes [i + 7] | (octets [i + 8] << 8);
var f = octets [i + 9];
i + = 10;
if (f & 0x40)
frame.interlace = true;
if (f & 0x20)
frame.sorted = true;
if (f & 0x80) {
frame.colorresolution = (f & 0x7) +1;
frame.LocalPalette = [];
i + = getPalette (i, octets, frame.localpalette, 1 << frame.colorresolution);
}
autre{
frame.colorResolution = gif.colorresolution;
frame.localpalette = gif.globalpalette;
}
var lzwlen = octets [i ++] + 1;
i + = getblock (i, octets, frame.data);
frame.data = decodelzw (frame.data, lzwlen);
return frame.data?i-pos:0;
}
// Définissez la structure de données pour stocker les fichiers GIF
// Fournit la méthode ShowInfo, retourne les informations de l'image
fonction gif () {
this.version = "";
this.width = 0;
this.height = 0;
this.colorresolution = 0; // profondeur de couleur
this.sorted = false;
this.globalpalette = null;
this.backgroundIndex = -1;
this.Pixelasprectradio = 0;
this.frames = [];
this.showinfo = fonction (sep) {// Afficher les informations de l'image, SEP est le séparateur de ligne
si (! sept)
sep = "/ n";
var s = "Informations GIF:" + Sep + "--------------------------------------- -------------------------------------------------- -----------------------
s + = subinfo (this) + sep;
pour (var i = 0; i <this.frames.length; i ++)
S + = SEP + "Frames" + I + "----------------------------------------- -------------------------------------------------- ---------------------
retour s;
fonction subinfo (o) {
var s = "";
for (var i in o) {
if (i == "showInfo" || i == "draw")
continuer;
s + = sep + i + ":";
if (typeof (o [i]) == "objet")
s + = (o [i]? o [i] .length: "null");
autre
s + = o [i];
}
retour s;
}
}
}
// définir la structure de données qui stocke un cadre d'images
// Fournit la méthode Draw, dessin
fonction gif_frame () {
this.offsetx = 0;
this.offsety = 0;
this.width = 0; // largeur d'image
this.height = 0;
this.Localpalette = null;
this.colorresolution = 0; // profondeur de couleur
this.interlace = false;
this.sorted = false;
this.data = [];
this.transparentIndex = -1;
this.delay = 0;
this.draw = fonction (parent, zoom) {
if (! this.data.length)
retour;
si (! parent)
parent = document.body;
si (! zoom)
zoom = 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);
si (img)
supprimer parent.removechild (IMG);
img = document.CreateElement ("div");
img.id = id;
Parent.ApendChild (IMG);
img.style.position = "absolu";
var t = document.CreateElement ("div");
t.style.overflow = "Hidden";
t.style.position = "absolu";
Deflayout (this.data, this.localpalette, this.width, this.height, img, t, zoom);
supprimer t;
}
}
}
// Décodage de base64
// strin, entrez la chaîne
// Un retour réussi d'un tableau, chaque élément contient un octet d'information
// retourner null en cas d'échec
fonction decodeBase64 (strin) {
if (! strin.length || strin.length% 4)
retourner null;
var str64 =
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 + / =";
var index64 = [];
pour (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 = [];
pour (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);
}
}
Résultat de retour;
}
// Fonction de décodage LZW pour GIF
// Arrbytes est les données source, Nbits est le nombre initial de bits codés
// a renvoyé avec succès le tableau, chaque élément comprend un index de couleur
// retourner null en cas d'échec
fonction decodelzw (arrbytes, nbits) {
var cc = 1 << (nbits-1);
var eoi = cc + 1;
var table = [], mask = [], résultat = [];
pour (var i = 0; i <cc; i ++)
Tableau [i] = (i >> 8 & 0xf) .tostring (16)
+ (i >> 4 & 0xf) .toString (16) + (i & 0xf) .toString (16);
pour (i = 2, masque [1] = 1; i <13; i ++)
masque [i] = masque [i-1] << 1 | 1;
var bc = nbits;
var pos = 0, temp = 0, tleft = 0, code = 0, old = 0;
while (true) {
while (tleft <bc) {
temp = temp | (Arrbytes [pos ++] << tleft);
tleft + = 8;
}
Code = temp & mask [BC];
tleft- = bc;
Temp >> = BC;
if (code == eoi)
casser;
if (code == cc) {
table.length = cc + 2;
bc = nbits;
old = code;
continuer;
}
var t = "";
if (code <table.length) {
t = table [code];
si (vieux! = cc)
table.push (table [old] + t.slice (0,3));
}
else if (old <table.length) {
T = tableau [Old] + Table [Old] .slice (0,3);
table.push (t);
}
autre{
alert ("Erreur: données d'image non valides");
retourner null;
}
old = code;
pour (var i = 0; i <t.length; i + = 3)
Result.push (ParseInt (T.Substr (I, 3), 16))
if (table.length == 1 << bc && bc <12)
BC ++;
}
Résultat de retour;
}
// dessiner avec un div minimal selon la disposition des données du tableau des octets
Deflayout de fonction (données, palette, largeur, hauteur, image, bloc, zoom) {
var map = nouveau tableau (hauteur);
pour (var i = 0; i <hauteur; i ++) {
map [i] = nouveau tableau (largeur);
pour (var j = 0; j <largeur; j ++)
map [i] [j] = data [i * width + j];
}
var i, j, i1, i2, j1, j2, c;
pour (i = 0; i <hauteur; i ++)
pour (j = 0; j <largeur;) {
if (map [i] [j] == 0x100) {
j ++;
continuer;
}
c = map [i] [j];
for (i1 = i + 1; i1 <height && map [i1] [j] == c; i1 ++);
pour (j1 = j + 1; j1 <largeur; j1 ++) {
for (i2 = i; i2 <i1 && map [i2] [j1] == c; i2 ++);
si (i2 <i1)
casser;
}
pour (i2 = i; i2 <i1; i2 ++)
pour (j2 = j; j2 <j1; j2 ++)
map [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.ApendChild (x);
J = J1;
}
}
</cript>
<cript>
fonction main () {
var t = new Date (). getTime ();
var xmldom = document.getElementById ("imgdata");
var gif = getgif ("r0lgodlhdwapakecaaaazmzm //////aaacwaaadwapaaaciispeqhsrz5modrlln48cxf8m2iq3ymkqvlrtw4mlwwach + h09wdgltxp Aow == ");
var info = document.getElementById ("info");
info.innerhtml = gif.showinfo ("<br>");
t = new Date (). getTime ();
gif.frames [0] .Draw (document.getElementById ("Canvas"), 1);
info.innerhtml + = "<br> Temps de dessin" + (new Date (). GetTime () - T) + "MS";
}
</cript>
<body onload = "main ()">
<div id = "canvas"> </div>
<hr>
<div id = "info"> La page se charge, veuillez patienter ... </div>
</docy>
</html>
PS: Voici quelques outils photo en ligne pour votre référence
Conversion d'image en Base64 Encoder en ligne outil:
http://tools.vevb.com/transcoding/img2base64
Outil de création d'icônes par e-mail en ligne:
http://tools.vevb.com/email/EMALLOGO
Outil de traitement d'image en ligne PS:
http://tools.vevb.com/aideddesign/webps
Conversion de format d'image en ligne (JPG / BMP / GIF / PNG):
http://tools.vevb.com/aideddesign/picext
Tool de génération en ligne ICO icône:
http://tools.vevb.com/aideddesign/ico_img
Attachement: De plus, un outil de conversion de codage Base64 est recommandé
Outil de codage et de décodage de base64:
http://tools.vevb.com/transcoding/Base64