Lap

贴吧编辑框生成舔楼主图片

当前为 2014-11-10 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name	Lap
// @author	googleGuard
// @version	2.1
// @description 贴吧编辑框生成舔楼主图片
// @description:zh-cn  贴吧编辑框生成舔楼主图片
// @namespace googleGuard
// @include	http://tieba.baidu.com/p/*
// @include     http://tieba.baidu.com/f?*
// @include	http://imgsrc.baidu.com/*
// @include	http://*photos.bdimg.com/*
// @include	http://tb.himg.baidu.com/*
// @run-at	document-end
// @grant	none
// ==/UserScript==

lapList = {
	'六花': {
		width: 200,
		height: 210,
		repeat: 0, //循环次数,0无限循环
		delay: 0, //每帧间隔,毫秒
		layer: [
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/5882b2b7d0a20cf4c463b28f75094b36adaf99eb.jpg'},
				{x: 40, y: 50, w: 60, h: 60, src: '[FACE]'},
			],
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/6f061d950a7b0208def170b161d9f2d3572cc8a2.jpg'},
				{x: 120, y: 80, w: 60, h: 60, src: '[FACE]'},
			],
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/e4dde71190ef76c6a806b77b9e16fdfaae51678d.jpg'},
				{x: 95, y: 140, w: 60, h: 60, src: '[FACE]'},
			],
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/b58f8c5494eef01f23995495e3fe9925bd317dd4.jpg'},
				{x: 15, y: 150, w: 60, h: 60, src: '[FACE]'},
			],
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/b8389b504fc2d5628ffa9cbde41190ef77c66ceb.jpg'},
				{x: 0, y: 100, w: 60, h: 60, src: '[FACE]'},
			],
		]
	},
	'WHY_R_U_SO_DIAO': {
		width: 205,
		height: 148,
		layer: [
			[
				{x: 93, y: 32, w: 110, h: 110, src: '[FACE]'},
				{src: 'http://imgsrc.baidu.com/forum/pic/item/728da9773912b31b3c5482798518367adab4e1a2.jpg'},
			],
		]
	},
	'舔': {
		width: 186,
		height: 260,
		text: '笑舔[FLOOR]楼 @[NAME] <br>',
		afterText: '-------------------------',
		layer: [
			[
				{src: 'http://imgsrc.baidu.com/forum/pic/item/4ec2d5628535e5ddeba1e98f75c6a7efcf1b62d4.jpg'},
				{x: -95, y: 154, r: -Math.PI / 100 * 10.5, w: 110, h: 110, src: '[FACE]'},
			],
		]
	},
};

/**
 * This class handles LZW encoding
 * Adapted from Jef Poskanzer's Java port by way of J. M. G. Elliott.
 * @author Kevin Weiner (original Java version - [email protected])
 * @author Thibault Imbert (AS3 version - bytearray.org)
 * @author Kevin Kwok (JavaScript version - https://github.com/antimatter15/jsgif)
 * @version 0.1 AS3 implementation
 */
LZWEncoder=function(){var exports={};var EOF=-1;var imgW;var imgH;var pixAry;var initCodeSize;var remaining;var curPixel;var BITS=12;var HSIZE=5003;var n_bits;var maxbits=BITS;var maxcode;var maxmaxcode=1<<BITS;var htab=[];var codetab=[];var hsize=HSIZE;var free_ent=0;var clear_flg=false;var g_init_bits;var ClearCode;var EOFCode;var cur_accum=0;var cur_bits=0;var masks=[0x0000,0x0001,0x0003,0x0007,0x000F,0x001F,0x003F,0x007F,0x00FF,0x01FF,0x03FF,0x07FF,0x0FFF,0x1FFF,0x3FFF,0x7FFF,0xFFFF];var a_count;var accum=[];var LZWEncoder=exports.LZWEncoder=function LZWEncoder(width,height,pixels,color_depth){imgW=width;imgH=height;pixAry=pixels;initCodeSize=Math.max(2,color_depth)};var char_out=function char_out(c,outs){accum[a_count++]=c;if(a_count>=254)flush_char(outs)};var cl_block=function cl_block(outs){cl_hash(hsize);free_ent=ClearCode+2;clear_flg=true;output(ClearCode,outs)};var cl_hash=function cl_hash(hsize){for(var i=0;i<hsize;++i)htab[i]=-1};var compress=exports.compress=function compress(init_bits,outs){var fcode;var i;var c;var ent;var disp;var hsize_reg;var hshift;g_init_bits=init_bits;clear_flg=false;n_bits=g_init_bits;maxcode=MAXCODE(n_bits);ClearCode=1<<(init_bits-1);EOFCode=ClearCode+1;free_ent=ClearCode+2;a_count=0;ent=nextPixel();hshift=0;for(fcode=hsize;fcode<65536;fcode*=2)++hshift;hshift=8-hshift;hsize_reg=hsize;cl_hash(hsize_reg);output(ClearCode,outs);outer_loop:while((c=nextPixel())!=EOF){fcode=(c<<maxbits)+ent;i=(c<<hshift)^ent;if(htab[i]==fcode){ent=codetab[i];continue}else if(htab[i]>=0){disp=hsize_reg-i;if(i===0)disp=1;do{if((i-=disp)<0)i+=hsize_reg;if(htab[i]==fcode){ent=codetab[i];continue outer_loop}}while(htab[i]>=0)}output(ent,outs);ent=c;if(free_ent<maxmaxcode){codetab[i]=free_ent++;htab[i]=fcode}else cl_block(outs)}output(ent,outs);output(EOFCode,outs)};var encode=exports.encode=function encode(os){os.writeByte(initCodeSize);remaining=imgW*imgH;curPixel=0;compress(initCodeSize+1,os);os.writeByte(0)};var flush_char=function flush_char(outs){if(a_count>0){outs.writeByte(a_count);outs.writeBytes(accum,0,a_count);a_count=0}};var MAXCODE=function MAXCODE(n_bits){return(1<<n_bits)-1};var nextPixel=function nextPixel(){if(remaining===0)return EOF;--remaining;var pix=pixAry[curPixel++];return pix&0xff};var output=function output(code,outs){cur_accum&=masks[cur_bits];if(cur_bits>0)cur_accum|=(code<<cur_bits);else cur_accum=code;cur_bits+=n_bits;while(cur_bits>=8){char_out((cur_accum&0xff),outs);cur_accum>>=8;cur_bits-=8}if(free_ent>maxcode||clear_flg){if(clear_flg){maxcode=MAXCODE(n_bits=g_init_bits);clear_flg=false}else{++n_bits;if(n_bits==maxbits)maxcode=maxmaxcode;else maxcode=MAXCODE(n_bits)}}if(code==EOFCode){while(cur_bits>0){char_out((cur_accum&0xff),outs);cur_accum>>=8;cur_bits-=8}flush_char(outs)}};LZWEncoder.apply(this,arguments);return exports};

/*
 * NeuQuant Neural-Net Quantization Algorithm
 * ------------------------------------------
 *
 * Copyright (c) 1994 Anthony Dekker
 *
 * NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See
 * "Kohonen neural networks for optimal colour quantization" in "Network:
 * Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of
 * the algorithm.
 *
 * Any party obtaining a copy of these files from the author, directly or
 * indirectly, is granted, free of charge, a full and unrestricted irrevocable,
 * world-wide, paid up, royalty-free, nonexclusive right and license to deal in
 * this software and documentation files (the "Software"), including without
 * limitation the rights to use, copy, modify, merge, publish, distribute,
 * sublicense, and/or sell copies of the Software, and to permit persons who
 * receive copies from any such party to do so, with the only requirement being
 * that this copyright notice remain intact.
 */

/*
 * This class handles Neural-Net quantization algorithm
 * @author Kevin Weiner (original Java version - [email protected])
 * @author Thibault Imbert (AS3 version - bytearray.org)
 * @author Kevin Kwok (JavaScript version - https://github.com/antimatter15/jsgif)
 * @version 0.1 AS3 implementation
 */
NeuQuant=function(){var exports={};var netsize=256;var prime1=499;var prime2=491;var prime3=487;var prime4=503;var minpicturebytes=(3*prime4);var maxnetpos=(netsize-1);var netbiasshift=4;var ncycles=100;var intbiasshift=16;var intbias=(1<<intbiasshift);var gammashift=10;var gamma=(1<<gammashift);var betashift=10;var beta=(intbias>>betashift);var betagamma=(intbias<<(gammashift-betashift));var initrad=(netsize>>3);var radiusbiasshift=6;var radiusbias=(1<<radiusbiasshift);var initradius=(initrad*radiusbias);var radiusdec=30;var alphabiasshift=10;var initalpha=(1<<alphabiasshift);var alphadec;var radbiasshift=8;var radbias=(1<<radbiasshift);var alpharadbshift=(alphabiasshift+radbiasshift);var alpharadbias=(1<<alpharadbshift);var thepicture;var lengthcount;var samplefac;var network;var netindex=[];var bias=[];var freq=[];var radpower=[];var NeuQuant=exports.NeuQuant=function NeuQuant(thepic,len,sample){var i;var p;thepicture=thepic;lengthcount=len;samplefac=sample;network=new Array(netsize);for(i=0;i<netsize;i++){network[i]=new Array(4);p=network[i];p[0]=p[1]=p[2]=(i<<(netbiasshift+8))/netsize;freq[i]=intbias/netsize;bias[i]=0}};var colorMap=function colorMap(){var map=[];var index=new Array(netsize);for(var i=0;i<netsize;i++)index[network[i][3]]=i;var k=0;for(var l=0;l<netsize;l++){var j=index[l];map[k++]=(network[j][0]);map[k++]=(network[j][1]);map[k++]=(network[j][2])}return map};var inxbuild=function inxbuild(){var i;var j;var smallpos;var smallval;var p;var q;var previouscol;var startpos;previouscol=0;startpos=0;for(i=0;i<netsize;i++){p=network[i];smallpos=i;smallval=p[1];for(j=i+1;j<netsize;j++){q=network[j];if(q[1]<smallval){smallpos=j;smallval=q[1]}}q=network[smallpos];if(i!=smallpos){j=q[0];q[0]=p[0];p[0]=j;j=q[1];q[1]=p[1];p[1]=j;j=q[2];q[2]=p[2];p[2]=j;j=q[3];q[3]=p[3];p[3]=j}if(smallval!=previouscol){netindex[previouscol]=(startpos+i)>>1;for(j=previouscol+1;j<smallval;j++)netindex[j]=i;previouscol=smallval;startpos=i}}netindex[previouscol]=(startpos+maxnetpos)>>1;for(j=previouscol+1;j<256;j++)netindex[j]=maxnetpos};var learn=function learn(){var i;var j;var b;var g;var r;var radius;var rad;var alpha;var step;var delta;var samplepixels;var p;var pix;var lim;if(lengthcount<minpicturebytes)samplefac=1;alphadec=30+((samplefac-1)/3);p=thepicture;pix=0;lim=lengthcount;samplepixels=lengthcount/(3*samplefac);delta=(samplepixels/ncycles)|0;alpha=initalpha;radius=initradius;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(i=0;i<rad;i++)radpower[i]=alpha*(((rad*rad-i*i)*radbias)/(rad*rad));if(lengthcount<minpicturebytes)step=3;else if((lengthcount%prime1)!==0)step=3*prime1;else{if((lengthcount%prime2)!==0)step=3*prime2;else{if((lengthcount%prime3)!==0)step=3*prime3;else step=3*prime4}}i=0;while(i<samplepixels){b=(p[pix+0]&0xff)<<netbiasshift;g=(p[pix+1]&0xff)<<netbiasshift;r=(p[pix+2]&0xff)<<netbiasshift;j=contest(b,g,r);altersingle(alpha,j,b,g,r);if(rad!==0)alterneigh(rad,j,b,g,r);pix+=step;if(pix>=lim)pix-=lengthcount;i++;if(delta===0)delta=1;if(i%delta===0){alpha-=alpha/alphadec;radius-=radius/radiusdec;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(j=0;j<rad;j++)radpower[j]=alpha*(((rad*rad-j*j)*radbias)/(rad*rad))}}};var map=exports.map=function map(b,g,r){var i;var j;var dist;var a;var bestd;var p;var best;bestd=1000;best=-1;i=netindex[g];j=i-1;while((i<netsize)||(j>=0)){if(i<netsize){p=network[i];dist=p[1]-g;if(dist>=bestd)i=netsize;else{i++;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}if(j>=0){p=network[j];dist=g-p[1];if(dist>=bestd)j=-1;else{j--;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}}return(best)};var process=exports.process=function process(){learn();unbiasnet();inxbuild();return colorMap()};var unbiasnet=function unbiasnet(){var i;var j;for(i=0;i<netsize;i++){network[i][0]>>=netbiasshift;network[i][1]>>=netbiasshift;network[i][2]>>=netbiasshift;network[i][3]=i}};var alterneigh=function alterneigh(rad,i,b,g,r){var j;var k;var lo;var hi;var a;var m;var p;lo=i-rad;if(lo<-1)lo=-1;hi=i+rad;if(hi>netsize)hi=netsize;j=i+1;k=i-1;m=1;while((j<hi)||(k>lo)){a=radpower[m++];if(j<hi){p=network[j++];try{p[0]-=(a*(p[0]-b))/alpharadbias;p[1]-=(a*(p[1]-g))/alpharadbias;p[2]-=(a*(p[2]-r))/alpharadbias}catch(e){}}if(k>lo){p=network[k--];try{p[0]-=(a*(p[0]-b))/alpharadbias;p[1]-=(a*(p[1]-g))/alpharadbias;p[2]-=(a*(p[2]-r))/alpharadbias}catch(e){}}}};var altersingle=function altersingle(alpha,i,b,g,r){var n=network[i];n[0]-=(alpha*(n[0]-b))/initalpha;n[1]-=(alpha*(n[1]-g))/initalpha;n[2]-=(alpha*(n[2]-r))/initalpha};var contest=function contest(b,g,r){var i;var dist;var a;var biasdist;var betafreq;var bestpos;var bestbiaspos;var bestd;var bestbiasd;var n;bestd=~(1<<31);bestbiasd=bestd;bestpos=-1;bestbiaspos=bestpos;for(i=0;i<netsize;i++){n=network[i];dist=n[0]-b;if(dist<0)dist=-dist;a=n[1]-g;if(a<0)a=-a;dist+=a;a=n[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;bestpos=i}biasdist=dist-((bias[i])>>(intbiasshift-netbiasshift));if(biasdist<bestbiasd){bestbiasd=biasdist;bestbiaspos=i}betafreq=(freq[i]>>betashift);freq[i]-=betafreq;bias[i]+=(betafreq<<gammashift)}freq[bestpos]+=beta;bias[bestpos]-=betagamma;return(bestbiaspos)};NeuQuant.apply(this,arguments);return exports};

/**
 * This class lets you encode animated GIF files
 * Base class :  http://www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm
 * @author Kevin Weiner (original Java version - [email protected])
 * @author Thibault Imbert (AS3 version - bytearray.org)
 * @author Kevin Kwok (JavaScript version - https://github.com/antimatter15/jsgif)
 * @version 0.1 AS3 implementation
 */
GIFEncoder=function(){for(var i=0,chr={};i<256;i++)chr[i]=String.fromCharCode(i);function ByteArray(){this.bin=[]}ByteArray.prototype.getData=function(){for(var v='',l=this.bin.length,i=0;i<l;i++)v+=chr[this.bin[i]];return v};ByteArray.prototype.writeByte=function(val){this.bin.push(val)};ByteArray.prototype.writeUTFBytes=function(string){for(var l=string.length,i=0;i<l;i++)this.writeByte(string.charCodeAt(i))};ByteArray.prototype.writeBytes=function(array,offset,length){for(var l=length||array.length,i=offset||0;i<l;i++)this.writeByte(array[i])};var exports={};var width;var height;var transparent=null;var transIndex;var repeat=-1;var delay=0;var started=false;var out;var image;var pixels;var indexedPixels;var colorDepth;var colorTab;var usedEntry=[];var palSize=7;var dispose=-1;var closeStream=false;var firstFrame=true;var sizeSet=false;var sample=10;var comment="Generated by jsgif (https://github.com/antimatter15/jsgif/)";var setDelay=exports.setDelay=function setDelay(ms){delay=Math.round(ms/10)};var setDispose=exports.setDispose=function setDispose(code){if(code>=0)dispose=code};var setRepeat=exports.setRepeat=function setRepeat(iter){if(iter>=0)repeat=iter};var setTransparent=exports.setTransparent=function setTransparent(c){transparent=c};var setComment=exports.setComment=function setComment(c){comment=c};var addFrame=exports.addFrame=function addFrame(im,is_imageData){if((im===null)||!started||out===null){throw new Error("Please call start method before calling addFrame");}var ok=true;try{if(!is_imageData){image=im.getImageData(0,0,im.canvas.width,im.canvas.height).data;if(!sizeSet)setSize(im.canvas.width,im.canvas.height)}else{image=im}getImagePixels();analyzePixels();if(firstFrame){writeLSD();writePalette();if(repeat>=0){writeNetscapeExt()}}writeGraphicCtrlExt();if(comment!==''){writeCommentExt()}writeImageDesc();if(!firstFrame)writePalette();writePixels();firstFrame=false}catch(e){ok=false}return ok};var finish=exports.finish=function finish(){if(!started)return false;var ok=true;started=false;try{out.writeByte(0x3b)}catch(e){ok=false}return ok};var reset=function reset(){transIndex=0;image=null;pixels=null;indexedPixels=null;colorTab=null;closeStream=false;firstFrame=true};var setFrameRate=exports.setFrameRate=function setFrameRate(fps){if(fps!=0xf)delay=Math.round(100/fps)};var setQuality=exports.setQuality=function setQuality(quality){if(quality<1)quality=1;sample=quality};var setSize=exports.setSize=function setSize(w,h){if(started&&!firstFrame)return;width=w;height=h;if(width<1)width=320;if(height<1)height=240;sizeSet=true};var start=exports.start=function start(){reset();var ok=true;closeStream=false;out=new ByteArray();try{out.writeUTFBytes("GIF89a")}catch(e){ok=false}return started=ok};var cont=exports.cont=function cont(){reset();var ok=true;closeStream=false;out=new ByteArray();return started=ok};var analyzePixels=function analyzePixels(){var len=pixels.length;var nPix=len/3;indexedPixels=[];var nq=new NeuQuant(pixels,len,sample);colorTab=nq.process();var k=0;for(var j=0;j<nPix;j++){var index=nq.map(pixels[k++]&0xff,pixels[k++]&0xff,pixels[k++]&0xff);usedEntry[index]=true;indexedPixels[j]=index}pixels=null;colorDepth=8;palSize=7;if(transparent!==null){transIndex=findClosest(transparent)}};var findClosest=function findClosest(c){if(colorTab===null)return-1;var r=(c&0xFF0000)>>16;var g=(c&0x00FF00)>>8;var b=(c&0x0000FF);var minpos=0;var dmin=256*256*256;var len=colorTab.length;for(var i=0;i<len;){var dr=r-(colorTab[i++]&0xff);var dg=g-(colorTab[i++]&0xff);var db=b-(colorTab[i]&0xff);var d=dr*dr+dg*dg+db*db;var index=i/3;if(usedEntry[index]&&(d<dmin)){dmin=d;minpos=index}i++}return minpos};var getImagePixels=function getImagePixels(){var w=width;var h=height;pixels=[];var data=image;var count=0;for(var i=0;i<h;i++){for(var j=0;j<w;j++){var b=(i*w*4)+j*4;pixels[count++]=data[b];pixels[count++]=data[b+1];pixels[count++]=data[b+2]}}};var writeGraphicCtrlExt=function writeGraphicCtrlExt(){out.writeByte(0x21);out.writeByte(0xf9);out.writeByte(4);var transp;var disp;if(transparent===null){transp=0;disp=0}else{transp=1;disp=2}if(dispose>=0){disp=dispose&7}disp<<=2;out.writeByte(0|disp|0|transp);WriteShort(delay);out.writeByte(transIndex);out.writeByte(0)};var writeCommentExt=function writeCommentExt(){out.writeByte(0x21);out.writeByte(0xfe);out.writeByte(comment.length);out.writeUTFBytes(comment);out.writeByte(0)};var writeImageDesc=function writeImageDesc(){out.writeByte(0x2c);WriteShort(0);WriteShort(0);WriteShort(width);WriteShort(height);if(firstFrame){out.writeByte(0)}else{out.writeByte(0x80|0|0|0|palSize)}};var writeLSD=function writeLSD(){WriteShort(width);WriteShort(height);out.writeByte((0x80|0x70|0x00|palSize));out.writeByte(0);out.writeByte(0)};var writeNetscapeExt=function writeNetscapeExt(){out.writeByte(0x21);out.writeByte(0xff);out.writeByte(11);out.writeUTFBytes("NETSCAPE"+"2.0");out.writeByte(3);out.writeByte(1);WriteShort(repeat);out.writeByte(0)};var writePalette=function writePalette(){out.writeBytes(colorTab);var n=(3*256)-colorTab.length;for(var i=0;i<n;i++)out.writeByte(0)};var WriteShort=function WriteShort(pValue){out.writeByte(pValue&0xFF);out.writeByte((pValue>>8)&0xFF)};var writePixels=function writePixels(){var myencoder=new LZWEncoder(width,height,indexedPixels,colorDepth);myencoder.encode(out)};var stream=exports.stream=function stream(){return out};var setProperties=exports.setProperties=function setProperties(has_start,is_first){started=has_start;firstFrame=is_first};return exports};

// Lap
(function() {
	var contain = {
		id: 'LapContain',
		title: '\u0028\u0E51\u2022\u0300\u3142\u2022\u0301\u0029\u0648\u2727',
		width: 263,
		height: 426,
		left: function() {
			return (document.documentElement.clientWidth / 2 - this.width / 2).toFixed(1) + 'px'
		},
		top: function() {
			return (document.documentElement.clientHeight / 2 - this.height / 2).toFixed(1) + 'px'
		}
	};
	var face = {};
	var imageList = {};
	var getImage = function(u, c) {
		var x = createElement('IFRAME', {style:'display:none'});
		x.onload = function() {
			var t = setInterval(function() {
				if (!imageList[u]) {
					return
				};
				var i = new Image();
				i.onload = function() {
					c(this)
				};
				i.src = URL.createObjectURL(imageList[u]);
				x.parentNode.removeChild(x), clearInterval(t)
			}, 1);
		};
		x.src = u;
		document.documentElement.appendChild(x)
	};
	var postImage = function(b, c) {
		var t = new XMLHttpRequest();
		t.open('GET', 'http://tieba.baidu.com/dc/common/imgtbs', true);
		t.onreadystatechange = function() {
			t.readyState == 4 && (function(tbs) {
				var f = new FormData(), x = new XMLHttpRequest();
				f.append('file', b);
				x.open('POST', 'http://upload.tieba.baidu.com/upload/pic?tbs=' + tbs, true);
				x.onreadystatechange = function() {
					x.readyState == 4 && (function(i) {
						c(i.pic_water.replace('/tieba/', '/forum/'), i.fullpic_width, i.fullpic_height)
					})(JSON.parse(x.responseText).info)
				};
				x.withCredentials = true;
				x.send(f)
			})(JSON.parse(t.responseText).data.tbs)
		};
		t.send()
	};
	var madeImage = function(l, x, y, m, c) {
		var t = this, u = arguments, a = 'image/jpeg', b = t.getContext('2d'), k = lapList[l].layer, f = function(i) {
			y == 0 && (x == 1 && (m = new GIFEncoder(), a = 'image/gif', m.setRepeat(lapList[l].repeat || 0), m.setDelay(lapList[l].delay || 84), m.start(), !1) || x > 0 && m.addFrame(b));
			b.save();
			k[x][y].r && b.rotate(k[x][y].r);
			b.drawImage(i, k[x][y].x || 0, k[x][y].y || 0, k[x][y].w || t.width, k[x][y].h || t.height);
			b.restore();
			y = y < k[x].length - 1 ? y + 1 : (++x, 0);
			x < (!m ? 1 : k.length) ? madeImage.apply(t, u) : (c && c(toBlob((typeof(m) == 'object' ? (m.addFrame(b), m.finish(), m.stream().bin) : Array.prototype.map.call(atob(t.toDataURL(a).replace('data:' + a + ';base64,', '')), function(x) {return x.charCodeAt(0) & 0xff})), a)))
		}
		x == 0 && y == 0 && (t.height = lapList[l].height, t.width = lapList[l].width);
		getImage(k[x][y].src == '[FACE]' ? face.src : k[x][y].src, f)
	};
	var toBlob = function(s, f) {
		return new Blob([new Uint8Array(s).buffer], {type: f})
	};
	var createElement = function(e, s) {
		e = document.createElement(e), s = s || {};
		for (var i in s) {
			e.setAttribute(i, s[i])
		};
		return e
	};
	var removeContain = function(e) {
		var d = document.getElementById(contain.id);
		return d && (e && (e.preventDefault(), e.stopPropagation()) || d.parentNode.removeChild(d), !0)
	};
	var createContain = function(e) {
		var i, j, t, d, o;
		removeContain();
		d = createElement('DIV', {id: contain.id, class: 'dialogJ dialogJfix dialogJshadow ui-draggable', style: 'z-index:60001;width:' + contain.width + 'px;left:' + contain.left() + ';top:' + contain.top()});
		d.innerHTML = '<div class=uiDialogWrapper><div class=dialogJtitle><span class=dialogJtxt>' + contain.title + '</span><a href=# class=dialogJclose title=\u5173\u95ED>&nbsp;</a></div><div class=dialogJcontent><div class=dialogJbody style=overflow-x:hidden;overflow-y:scroll;height:' + (contain.height - 66) + 'px></div></div></div>';
		document.body.appendChild(d);
		o = e.target.parentNode, face.src = o.querySelector('.p_author_face>IMG').src + '?t=' + (new Date()).getTime();
		o = JSON.parse(o.parentNode.parentNode.parentNode.parentNode.getAttribute('data-field'));
		face.floor = o.content.post_no, face.name = o.author.user_name;
		i = document.querySelector('#' + contain.id + ' .dialogJbody');
		for (j in lapList) {
			t = createElement('CANVAS');
			i.appendChild(createElement('DIV', {class: 'lapContent', data: j, style: 'cursor:pointer'})).appendChild(t);
			madeImage.call(t, j, 0, 0, 0)
		}
	};

	if (location.hostname != 'tieba.baidu.com') {
		var Img = new Image();
		Img.onload = function() {
			var c = document.createElement('canvas');
			c.width = this.width, c.height = this.height;
			c.getContext('2d').drawImage(this, 0, 0);
			window.parent.postMessage(location.href + '!IMAGE_DATA!' + c.toDataURL(), '*')
		};
		Img.src = location.href;
		return
	};

	window.addEventListener('message', function(e) {
		if (e.data.indexOf('!IMAGE_DATA!') == -1) {
			return
		};
		e = e.data.split('!IMAGE_DATA!');
		imageList[e[0]] = toBlob(Array.prototype.map.call(atob(e[1].replace('data:image/png;base64,', '')), function(x) {return x.charCodeAt(0) & 0xff}), 'image/png')
	}, false);

	window.addEventListener('resize', function() {
		var d = document.getElementById(contain.id);
		d && (d.style.left = contain.left(), d.style.top = contain.top())
	}, false);

	document.addEventListener('click', function(e) {
		e.target.className.indexOf('dialogJclose') != -1 && removeContain(e);
		e.target.parentNode.className.indexOf('lapContent') != -1 && removeContain(e) && (function() {
			var i = e.target.parentNode.getAttribute('data');
			window.scrollTo(0, 0xffffff);
			madeImage.call(createElement('CANVAS'), i, 0, 0, 1, function(b) {
				postImage(b, function(u, w, h) {
					var r = function(t) {
						return t.replace('[FLOOR]', face.floor).replace('[NAME]', face.name)
					};
					document.getElementById('ueditor_replace').innerHTML += (lapList[i].text ? '<p>' + r(lapList[i].text) + '</p>' : '') + '<p><img class=BDE_Image src="' + u + '" unselectable=on pic_type=0 height= ' + h + ' width= ' + w + '></p>' + (lapList[i].afterText ? '<p>' + r(lapList[i].afterText) + '</p>' : '')
				})
			})
		})()
	}, false);

	(function() {
		var f = document.querySelectorAll('.icon_relative');
		for (var i = f.length - 1; i > -1; i--) {
			var j = f[i].appendChild(createElement('DIV', {class: 'LAP_BUTTON', style: 'position:absolute;right:0;bottom:0;background-color:#eee;padding:0 3px 0 3px;border-radius:2px;box-shadow:0 0 1px #333'}));
			j.addEventListener('click', createContain, false);
			j.textContent = '\u8214'
		}
	})()

})();