~jstys-z/helioviewer.org/timeline

« back to all changes in this revision

Viewing changes to lib/pixastic/pixastic.custom.js

  • Committer: V. Keith Hughitt
  • Date: 2009-03-26 19:20:57 UTC
  • Revision ID: hughitt1@kore-20090326192057-u0x8rf8sf5lmmnwh
nightly build 03-26-2009: Using alpha-channel JPEG 2000 dataset

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Pixastic - JavaScript Image Processing Library
 
3
 * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
 
4
 * MIT License [http://www.nihilogic.dk/licenses/mit-license.txt]
 
5
 */
 
6
 
 
7
 
 
8
var Pixastic=(function(){function addEvent(el,event,handler){if(el.addEventListener)
 
9
el.addEventListener(event,handler,false);else if(el.attachEvent)
 
10
el.attachEvent("on"+event,handler);}
 
11
function onready(handler){var handlerDone=false;var execHandler=function(){if(!handlerDone){handlerDone=true;handler();}}
 
12
document.write("<"+"script defer src=\"//:\" id=\"__onload_ie_sumbox__\"></"+"script>");var script=document.getElementById("__onload_ie_sumbox__");script.onreadystatechange=function(){if(script.readyState=="complete"){script.parentNode.removeChild(script);execHandler();}}
 
13
if(document.addEventListener)
 
14
document.addEventListener("DOMContentLoaded",execHandler,false);addEvent(window,"load",execHandler);}
 
15
function init(){if(!Pixastic.parseOnLoad)return;var imgEls=getElementsByClass("pixastic",null,"img");var canvasEls=getElementsByClass("pixastic",null,"canvas");var elements=imgEls.concat(canvasEls);for(var i=0;i<elements.length;i++){(function(){var el=elements[i];var actions=[];var classes=el.className.split(" ");for(var c=0;c<classes.length;c++){var cls=classes[c];if(cls.substring(0,9)=="pixastic-"){var actionName=cls.substring(9);if(actionName!="")
 
16
actions.push(actionName);}}
 
17
if(actions.length){if(el.tagName=="IMG"){var dataImg=new Image();dataImg.src=el.src;if(dataImg.complete){for(var a=0;a<actions.length;a++){var res=Pixastic.applyAction(el,el,actions[a],null);if(res)
 
18
el=res;}}else{dataImg.onload=function(){for(var a=0;a<actions.length;a++){var res=Pixastic.applyAction(el,el,actions[a],null)
 
19
if(res)
 
20
el=res;}}}}else{setTimeout(function(){for(var a=0;a<actions.length;a++){var res=Pixastic.applyAction(el,el,actions[a],null);if(res)
 
21
el=res;}},1);}}})();}}
 
22
onready(init);function getElementsByClass(searchClass,node,tag){var classElements=new Array();if(node==null)
 
23
node=document;if(tag==null)
 
24
tag='*';var els=node.getElementsByTagName(tag);var elsLen=els.length;var pattern=new RegExp("(^|\\s)"+searchClass+"(\\s|$)");for(i=0,j=0;i<elsLen;i++){if(pattern.test(els[i].className)){classElements[j]=els[i];j++;}}
 
25
return classElements;}
 
26
var debugElement;function writeDebug(text,level){if(!Pixastic.debug)return;try{switch(level){case"warn":console.warn("Pixastic:",text);break;case"error":console.error("Pixastic:",text);break;default:console.log("Pixastic:",text);}}catch(e){}
 
27
if(!debugElement){}}
 
28
return{parseOnLoad:false,debug:false,applyAction:function(img,dataImg,actionName,options){options=options||{};var imageIsCanvas=(img.tagName=="CANVAS");if(imageIsCanvas&&Pixastic.Client.isIE()){if(Pixastic.debug)writeDebug("Tried to process a canvas element but browser is IE.");return false;}
 
29
var canvas,ctx;if(Pixastic.Client.hasCanvas()){canvas=document.createElement("canvas");ctx=canvas.getContext("2d");}
 
30
var w=parseInt(img.offsetWidth);var h=parseInt(img.offsetHeight);if(actionName.indexOf("(")>-1){var tmp=actionName;actionName=tmp.substr(0,tmp.indexOf("("));var arg=tmp.match(/\((.*?)\)/);if(arg[1]){arg=arg[1].split(";");for(var a=0;a<arg.length;a++){thisArg=arg[a].split("=");if(thisArg.length==2){if(thisArg[0]=="rect"){var rectVal=thisArg[1].split(",");options[thisArg[0]]={left:parseInt(rectVal[0],10)||0,top:parseInt(rectVal[1],10)||0,width:parseInt(rectVal[2],10)||0,height:parseInt(rectVal[3],10)||0}}else{options[thisArg[0]]=thisArg[1];}}}}}
 
31
if(!options.rect){options.rect={left:0,top:0,width:w,height:h};}
 
32
var validAction=false;if(Pixastic.Actions[actionName]&&typeof Pixastic.Actions[actionName].process=="function"){validAction=true;}
 
33
if(!validAction){if(Pixastic.debug)writeDebug("Invalid action \""+actionName+"\". Maybe file not included?");return false;}
 
34
if(!Pixastic.Actions[actionName].checkSupport()){if(Pixastic.debug)writeDebug("Action \""+actionName+"\" not supported by this browser.");return false;}
 
35
if(Pixastic.Client.hasCanvas()){canvas.width=w;canvas.height=h;canvas.style.width=w+"px";canvas.style.height=h+"px";ctx.drawImage(dataImg,0,0,w,h);}
 
36
var params={image:img,canvas:canvas,width:w,height:h,useData:true,options:options}
 
37
var res=Pixastic.Actions[actionName].process(params);if(!res){return false;}
 
38
if(Pixastic.Client.hasCanvas()){if(params.useData){if(Pixastic.Client.hasCanvasImageData()){canvas.getContext("2d").putImageData(params.canvasData,options.rect.left,options.rect.top);canvas.getContext("2d").fillRect(0,0,0,0);}}
 
39
canvas.title=img.title;canvas.imgsrc=img.imgsrc;if(!imageIsCanvas)canvas.alt=img.alt;if(!imageIsCanvas)canvas.imgsrc=img.src;canvas.className=img.className;if(img.getAttribute("style"))
 
40
canvas.setAttribute("style",img.getAttribute("style"));canvas.cssText=img.cssText;canvas.name=img.name;canvas.tabIndex=img.tabIndex;canvas.id=img.id;if(img.parentNode&&img.parentNode.replaceChild){img.parentNode.replaceChild(canvas,img);}
 
41
return canvas;}
 
42
return img;},prepareData:function(params,getCopy){var ctx=params.canvas.getContext("2d");var rect=params.options.rect;var dataDesc=ctx.getImageData(rect.left,rect.top,rect.width,rect.height);var data=dataDesc.data;if(!getCopy)params.canvasData=dataDesc;return data;},process:function(img,actionName,options,callback)
 
43
{if(img.tagName=="IMG"){var dataImg=new Image();dataImg.src=img.src;if(dataImg.complete){var res=Pixastic.applyAction(img,dataImg,actionName,options);if(callback)callback(res);return res;}else{dataImg.onload=function(){var res=Pixastic.applyAction(img,dataImg,actionName,options)
 
44
if(callback)callback(res);}}}
 
45
if(img.tagName=="CANVAS"){var res=Pixastic.applyAction(img,img,actionName,options);if(callback)callback(res);return res;}},Client:{hasCanvas:(function(){var c=document.createElement("canvas");var val=false;try{val=!!((typeof c.getContext=="function")&&c.getContext("2d"));}catch(e){}
 
46
return function(){return val;}})(),hasCanvasImageData:(function(){var c=document.createElement("canvas");var val=false;var ctx;try{if(typeof c.getContext=="function"&&(ctx=c.getContext("2d"))){val=(typeof ctx.getImageData=="function");}}catch(e){}
 
47
return function(){return val;}})(),isIE:function(){return!!document.all&&!!window.attachEvent&&!window.opera;}},Actions:{}}})();if(typeof jQuery!="undefined"&&jQuery&&jQuery.fn){jQuery.fn.pixastic=function(action,options){var newElements=[];this.each(function(){if(this.tagName=="IMG"&&!this.complete){return;}
 
48
var res=Pixastic.process(this,action,options);if(res){newElements.push(res);}});if(newElements.length>0)
 
49
return jQuery(newElements);else
 
50
return this;};};Pixastic.Actions.brightness={process:function(params){var brightness=parseInt(params.options.brightness,10)||0;var contrast=parseFloat(params.options.contrast)||0;var legacy=!!(params.options.legacy);if(legacy){brightness=Math.min(150,Math.max(-150,brightness));}else{var brightMul=1+Math.min(150,Math.max(-150,brightness))/150;}
 
51
contrast=Math.max(0,contrast+1);if(Pixastic.Client.hasCanvasImageData()){var data=Pixastic.prepareData(params);var rect=params.options.rect;var w=rect.width;var h=rect.height;var w4=w*4;var y=h;do{var offsetY=(y-1)*w4;var x=w;do{var offset=offsetY+(x-1)*4;if(legacy){var r=data[offset]+brightness;var g=data[offset+1]+brightness;var b=data[offset+2]+brightness;}else{var r=data[offset]*brightMul;var g=data[offset+1]*brightMul;var b=data[offset+2]*brightMul;}
 
52
if(contrast!=1){r=(r-128)*contrast+128;g=(g-128)*contrast+128;b=(b-128)*contrast+128;}
 
53
if(r<0)r=0;if(g<0)g=0;if(b<0)b=0;if(r>255)r=255;if(g>255)g=255;if(b>255)b=255;data[offset]=r;data[offset+1]=g;data[offset+2]=b;}while(--x);}while(--y);return true;}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData();}}
 
54
Pixastic.Actions.coloradjust={process:function(params){var red=parseFloat(params.options.red)||0;var green=parseFloat(params.options.green)||0;var blue=parseFloat(params.options.blue)||0;red=Math.round(red*255);green=Math.round(green*255);blue=Math.round(blue*255);if(Pixastic.Client.hasCanvasImageData()){var data=Pixastic.prepareData(params);var rect=params.options.rect;var w=rect.width;var h=rect.height;var w4=w*4;var y=h;do{var offsetY=(y-1)*w4;var x=w;do{var offset=offsetY+(x-1)*4;var r=data[offset]+red;var g=data[offset+1]+green;var b=data[offset+2]+blue;if(r<0)r=0;if(g<0)g=0;if(b<0)b=0;if(r>255)r=255;if(g>255)g=255;if(b>255)b=255;data[offset]=r;data[offset+1]=g;data[offset+2]=b;}while(--x);}while(--y);return true;}},checkSupport:function(){return(Pixastic.Client.hasCanvasImageData());}}
 
55
Pixastic.Actions.edges={process:function(params){var mono=!!(params.options.mono);var strength=1.0;var invert=!!(params.options.invert);if(Pixastic.Client.hasCanvasImageData()){var data=Pixastic.prepareData(params);var dataCopy=Pixastic.prepareData(params,true)
 
56
var c=-strength/8;var kernel=[[c,c,c],[c,1,c],[c,c,c]];weight=1/c;var rect=params.options.rect;var w=rect.width;var h=rect.height;var w4=w*4;var y=h;do{var offsetY=(y-1)*w4;var nextY=(y==h)?y-1:y;var prevY=(y==1)?0:y-2;var offsetYPrev=prevY*w*4;var offsetYNext=nextY*w*4;var x=w;do{var offset=offsetY+(x*4-4);var offsetPrev=offsetYPrev+((x==1)?0:x-2)*4;var offsetNext=offsetYNext+((x==w)?x-1:x)*4;var r=((dataCopy[offsetPrev-4]
 
57
+dataCopy[offsetPrev]
 
58
+dataCopy[offsetPrev+4]
 
59
+dataCopy[offset-4]
 
60
+dataCopy[offset+4]
 
61
+dataCopy[offsetNext-4]
 
62
+dataCopy[offsetNext]
 
63
+dataCopy[offsetNext+4])*c
 
64
+dataCopy[offset])*weight;var g=((dataCopy[offsetPrev-3]
 
65
+dataCopy[offsetPrev+1]
 
66
+dataCopy[offsetPrev+5]
 
67
+dataCopy[offset-3]
 
68
+dataCopy[offset+5]
 
69
+dataCopy[offsetNext-3]
 
70
+dataCopy[offsetNext+1]
 
71
+dataCopy[offsetNext+5])*c
 
72
+dataCopy[offset+1])*weight;var b=((dataCopy[offsetPrev-2]
 
73
+dataCopy[offsetPrev+2]
 
74
+dataCopy[offsetPrev+6]
 
75
+dataCopy[offset-2]
 
76
+dataCopy[offset+6]
 
77
+dataCopy[offsetNext-2]
 
78
+dataCopy[offsetNext+2]
 
79
+dataCopy[offsetNext+6])*c
 
80
+dataCopy[offset+2])*weight;if(mono){var brightness=(r*0.3+g*0.59+b*0.11)||0;if(invert)brightness=255-brightness;if(brightness<0)brightness=0;if(brightness>255)brightness=255;r=g=b=brightness;}else{if(invert){r=255-r;g=255-g;b=255-b;}
 
81
if(r<0)r=0;if(g<0)g=0;if(b<0)b=0;if(r>255)r=255;if(g>255)g=255;if(b>255)b=255;}
 
82
data[offset]=r;data[offset+1]=g;data[offset+2]=b;}while(--x);}while(--y);return true;}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData();}}
 
83
Pixastic.Actions.sharpen={process:function(params){var strength=0;if(typeof params.options.amount!="undefined")
 
84
strength=parseFloat(params.options.amount)||0;if(strength<0)strength=0;if(strength>1)strength=1;if(Pixastic.Client.hasCanvasImageData()){var data=Pixastic.prepareData(params);var dataCopy=Pixastic.prepareData(params,true)
 
85
var mul=15;var mulOther=1+3*strength;var kernel=[[0,-mulOther,0],[-mulOther,mul,-mulOther],[0,-mulOther,0]];var weight=0;for(var i=0;i<3;i++){for(var j=0;j<3;j++){weight+=kernel[i][j];}}
 
86
weight=1/weight;var rect=params.options.rect;var w=rect.width;var h=rect.height;mul*=weight;mulOther*=weight;var w4=w*4;var y=h;do{var offsetY=(y-1)*w4;var nextY=(y==h)?y-1:y;var prevY=(y==1)?0:y-2;var offsetYPrev=prevY*w4;var offsetYNext=nextY*w4;var x=w;do{var offset=offsetY+(x*4-4);var offsetPrev=offsetYPrev+((x==1)?0:x-2)*4;var offsetNext=offsetYNext+((x==w)?x-1:x)*4;var r=((-dataCopy[offsetPrev]
 
87
-dataCopy[offset-4]
 
88
-dataCopy[offset+4]
 
89
-dataCopy[offsetNext])*mulOther
 
90
+dataCopy[offset]*mul);var g=((-dataCopy[offsetPrev+1]
 
91
-dataCopy[offset-3]
 
92
-dataCopy[offset+5]
 
93
-dataCopy[offsetNext+1])*mulOther
 
94
+dataCopy[offset+1]*mul);var b=((-dataCopy[offsetPrev+2]
 
95
-dataCopy[offset-2]
 
96
-dataCopy[offset+6]
 
97
-dataCopy[offsetNext+2])*mulOther
 
98
+dataCopy[offset+2]*mul);if(r<0)r=0;if(g<0)g=0;if(b<0)b=0;if(r>255)r=255;if(g>255)g=255;if(b>255)b=255;data[offset]=r;data[offset+1]=g;data[offset+2]=b;}while(--x);}while(--y);return true;}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData();}}
 
 
b'\\ No newline at end of file'