Created
February 18, 2016 08:14
-
-
Save foobarable/f6260b5204231ce5e0eb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function( $ ){ | |
/** | |
* @class ZoomifyTileSource | |
* @classdesc A tilesource implementation for the zoomify format. | |
* | |
* @memberof OpenSeadragon | |
* @extends OpenSeadragon.TileSource | |
* @param {Number} width - the pixel width of the image. | |
* @param {Number} height | |
* @param {Number} tileSize | |
* @param {String} tilesUrl | |
*/ | |
$.ZoomifyTileSource = function( options ) { | |
console.log('ZoomifyTileSource function '); | |
options.tileSize = 256; | |
var currentImageSize = {x:options.width,y:options.height}; | |
options.imageSizes = [{x:options.width,y:options.height}]; | |
options.gridSize = [this._getGridSize(options.width,options.height,options.tileSize)]; | |
while(parseInt(currentImageSize.x) > options.tileSize || parseInt(currentImageSize.y) > options.tileSize) { | |
currentImageSize.x = Math.floor(currentImageSize.x/2); | |
currentImageSize.y = Math.floor(currentImageSize.y/2); | |
options.imageSizes.push({x:currentImageSize.x,y:currentImageSize.y}); | |
options.gridSize.push(this._getGridSize(currentImageSize.x,currentImageSize.y,options.tileSize)); | |
} | |
options.imageSizes.reverse(); | |
options.gridSize.reverse(); | |
options.minLevel = 0; | |
options.maxLevel = options.gridSize.length-1; | |
OpenSeadragon.TileSource.apply( this, [ options ] ); | |
}; | |
$.extend( $.ZoomifyTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.ZoomifyTileSource.prototype */{ | |
_getGridSize: function(width,height,tileSize) { | |
return {x: Math.ceil(width/tileSize),y:Math.ceil(height/tileSize)}; | |
}, | |
_calculateAbsoluteTileNumber: function (level, x, y) { | |
var num = 0; | |
for (var z = 0; z < level; z++) { | |
var size = this.gridSize[z]; | |
num += size.x * size.y; | |
} | |
if (level < 2) { | |
num += level * y + x; | |
} else { | |
var size = this.gridSize[level - 2]; | |
num += size.x * size.y * y + x; | |
} | |
return num; | |
}, | |
/** | |
* Determine if the data and/or url imply the image service is supported by | |
* this tile source. | |
* @function | |
* @param {Object|Array} data | |
* @param {String} optional - url | |
*/ | |
supports: function( data, url ){ | |
console.log('ZoomifyTileSource supports ' + data.type); | |
return ( data.type && "zoomifytileservice" == data.type ); | |
}, | |
/** | |
* | |
* @function | |
* @param {Object} data - the raw configuration | |
* @param {String} url - the url the data was retreived from if any. | |
* @return {Object} options - A dictionary of keyword arguments sufficient | |
* to configure this tile sources constructor. | |
*/ | |
configure: function( data, url ){ | |
console.log('ZoomifyTileSource configure ' + data.tilesUrl); | |
return data; | |
}, | |
/** | |
* @function | |
* @param {Number} level | |
* @param {Number} x | |
* @param {Number} y | |
*/ | |
getTileUrl: function( level, x, y ){ | |
console.log(level); | |
var result = 0; | |
var num = this._calculateAbsoluteTileNumber(level,x,y); | |
result = Math.floor(num/256); | |
return this.tilesUrl + 'TileGroup' + result + '/' + level + '-' + x + '-' + y + '.jpg'; | |
}, | |
}); | |
}( OpenSeadragon )); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment