69 lines
1.3 KiB
JavaScript
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 };
|
|
}
|
|
); |