/* * JavaScript Load Image Demo JS * https://github.com/blueimp/JavaScript-Load-Image * * Copyright 2013, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ /*global window, document, loadImage, HTMLCanvasElement, $ */ $(function () { 'use strict' var result = $('#result') var exifNode = $('#exif') var thumbNode = $('#thumbnail') var actionsNode = $('#actions') var currentFile var coordinates function replaceResults (img) { var content if (!(img.src || img instanceof HTMLCanvasElement)) { content = $('Loading image file failed') } else { content = $('').append(img) .attr('download', currentFile.name) .attr('href', img.src || img.toDataURL()) } result.children().replaceWith(content) if (img.getContext) { actionsNode.show() } } function displayImage (file, options) { currentFile = file if (!loadImage( file, replaceResults, options )) { result.children().replaceWith( $('Your browser does not support the URL or FileReader API.') ) } } function displayExifData (exif) { var thumbnail = exif.get('Thumbnail') var tags = exif.getAll() var table = exifNode.find('table').empty() var row = $('') var cell = $('') var prop if (thumbnail) { thumbNode.empty() loadImage(thumbnail, function (img) { thumbNode.append(img).show() }, {orientation: exif.get('Orientation')}) } for (prop in tags) { if (tags.hasOwnProperty(prop)) { table.append( row.clone() .append(cell.clone().text(prop)) .append(cell.clone().text(tags[prop])) ) } } exifNode.show() } function dropChangeHandler (e) { e.preventDefault() e = e.originalEvent var target = e.dataTransfer || e.target var file = target && target.files && target.files[0] var options = { maxWidth: result.width(), canvas: true, pixelRatio: window.devicePixelRatio, downsamplingRatio: 0.5 } if (!file) { return } exifNode.hide() thumbNode.hide() loadImage.parseMetaData(file, function (data) { if (data.exif) { options.orientation = data.exif.get('Orientation') displayExifData(data.exif) } displayImage(file, options) }) } // Hide URL/FileReader API requirement message in capable browsers: if (window.createObjectURL || window.URL || window.webkitURL || window.FileReader) { result.children().hide() } $(document) .on('dragover', function (e) { e.preventDefault() e = e.originalEvent e.dataTransfer.dropEffect = 'copy' }) .on('drop', dropChangeHandler) $('#file-input').on('change', dropChangeHandler) $('#edit').on('click', function (event) { event.preventDefault() var imgNode = result.find('img, canvas') var img = imgNode[0] var pixelRatio = window.devicePixelRatio || 1 imgNode.Jcrop({ setSelect: [ 40, 40, (img.width / pixelRatio) - 40, (img.height / pixelRatio) - 40 ], onSelect: function (coords) { coordinates = coords }, onRelease: function () { coordinates = null } }).parent().on('click', function (event) { event.preventDefault() }) }) $('#crop').on('click', function (event) { event.preventDefault() var img = result.find('img, canvas')[0] var pixelRatio = window.devicePixelRatio || 1 if (img && coordinates) { replaceResults(loadImage.scale(img, { left: coordinates.x * pixelRatio, top: coordinates.y * pixelRatio, sourceWidth: coordinates.w * pixelRatio, sourceHeight: coordinates.h * pixelRatio, minWidth: result.width(), maxWidth: result.width(), pixelRatio: pixelRatio, downsamplingRatio: 0.5 })) coordinates = null } }) })