mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-29 00:26:10 +03:00
Added first version of zoomifytilesource.js
This commit is contained in:
parent
71f93a27cd
commit
48eee7e75c
97
src/zoomifytilesource.js
Normal file
97
src/zoomifytilesource.js
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
(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 ));
|
Loading…
Reference in New Issue
Block a user