(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 ) { 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; } var size = this.gridSize[level]; num += size.x*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 ));