2013-09-28 13:30:17 +02:00

69 lines
1.3 KiB
JavaScript

/*global define*/
define(
function()
{
var signals;
var image;
var initialized = false;
// max 2k px per side, so 2000 * 2000
var max_image_area = 4000000;
function init( shared )
{
signals = shared.signals;
image = new Image();
signals['set-new-src'].add( setSrc );
image.addEventListener( 'load', imageLoaded, false );
// the image "Abraham Lincoln November 1863" is public domain:
// https://en.wikipedia.org/wiki/File:Abraham_Lincoln_November_1863.jpg
setSrc( 'lincoln.jpg' );
}
function imageLoaded()
{
constrainImageSize( image );
signals['image-loaded'].dispatch( image );
initialized = true;
}
function setSrc( src )
{
image.src = src;
if (
initialized &&
image.naturalWidth !== undefined &&
image.naturalWidth !== 0
)
{
setTimeout( imageLoaded, 10 );
}
}
function constrainImageSize( img )
{
var ratio = 0;
var image_width = img.naturalWidth;
var image_height = img.naturalWidth;
var image_area = image_width * image_height;
if ( image_area > max_image_area )
{
ratio = max_image_area / image_area;
image_width *= ratio;
image_height *= ratio;
img.naturalWidth = Math.floor( image_width );
img.naturalWidth = Math.floor( image_height );
}
}
return { init: init };
}
);