| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * A namespace class for image encoding functions. All methods are static. | 6 * A namespace class for image encoding functions. All methods are static. |
| 7 */ | 7 */ |
| 8 function ImageEncoder() {} | 8 function ImageEncoder() {} |
| 9 | 9 |
| 10 //TODO(JSDOC) | 10 //TODO(JSDOC) |
| 11 ImageEncoder.metadataEncoders = {}; | 11 ImageEncoder.metadataEncoders = {}; |
| 12 | 12 |
| 13 //TODO(JSDOC) | 13 //TODO(JSDOC) |
| 14 ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { | 14 ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { |
| 15 ImageEncoder.metadataEncoders[mimeType] = constructor; | 15 ImageEncoder.metadataEncoders[mimeType] = constructor; |
| 16 }; | 16 }; |
| 17 | 17 |
| 18 /** | 18 /** |
| 19 * Create a metadata encoder. | 19 * Create a metadata encoder. |
| 20 * | 20 * |
| 21 * The encoder will own and modify a copy of the original metadata. | 21 * The encoder will own and modify a copy of the original metadata. |
| 22 * | 22 * |
| 23 * @param {Object} metadata Original metadata | 23 * @param {Object} metadata Original metadata. |
| 24 * @return {ImageEncoder.MetadataEncoder} Created metadata encoder. | 24 * @return {ImageEncoder.MetadataEncoder} Created metadata encoder. |
| 25 */ | 25 */ |
| 26 ImageEncoder.createMetadataEncoder = function(metadata) { | 26 ImageEncoder.createMetadataEncoder = function(metadata) { |
| 27 var constructor = ImageEncoder.metadataEncoders[metadata.mimeType] || | 27 var constructor = ImageEncoder.metadataEncoders[metadata.mimeType] || |
| 28 ImageEncoder.MetadataEncoder; | 28 ImageEncoder.MetadataEncoder; |
| 29 return new constructor(metadata); | 29 return new constructor(metadata); |
| 30 }; | 30 }; |
| 31 | 31 |
| 32 | 32 |
| 33 /** | 33 /** |
| 34 * Create a metadata encoder object holding a copy of metadata | 34 * Create a metadata encoder object holding a copy of metadata |
| 35 * modified according to the properties of the supplied image. | 35 * modified according to the properties of the supplied image. |
| 36 * | 36 * |
| 37 * @param {Object} metadata Original metadata | 37 * @param {Object} metadata Original metadata. |
| 38 * @param {HTMLCanvasElement} canvas Canvas to use for metadata. | 38 * @param {HTMLCanvasElement} canvas Canvas to use for metadata. |
| 39 * @param {number} quality Encoding quality (defaults to 1) | 39 * @param {number} quality Encoding quality (defaults to 1). |
| 40 * @return {ImageEncoder.MetadataEncoder} Encoder with encoded metadata. | 40 * @return {ImageEncoder.MetadataEncoder} Encoder with encoded metadata. |
| 41 */ | 41 */ |
| 42 ImageEncoder.encodeMetadata = function(metadata, canvas, quality) { | 42 ImageEncoder.encodeMetadata = function(metadata, canvas, quality) { |
| 43 var encoder = ImageEncoder.createMetadataEncoder(metadata); | 43 var encoder = ImageEncoder.createMetadataEncoder(metadata); |
| 44 encoder.setImageData(canvas); | 44 encoder.setImageData(canvas); |
| 45 encoder.setThumbnailData(ImageEncoder.createThumbnail(canvas), quality || 1); | 45 encoder.setThumbnailData(ImageEncoder.createThumbnail(canvas), quality || 1); |
| 46 return encoder; | 46 return encoder; |
| 47 }; | 47 }; |
| 48 | 48 |
| 49 | 49 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 // Skip the prefix ('data:image/<type>;base64,') | 113 // Skip the prefix ('data:image/<type>;base64,') |
| 114 var base64string = dataURL.substring(dataURL.indexOf(',') + 1); | 114 var base64string = dataURL.substring(dataURL.indexOf(',') + 1); |
| 115 return atob(base64string); | 115 return atob(base64string); |
| 116 }; | 116 }; |
| 117 | 117 |
| 118 /** | 118 /** |
| 119 * Return a thumbnail for an image. | 119 * Return a thumbnail for an image. |
| 120 * @param {HTMLCanvasElement} canvas Original image. | 120 * @param {HTMLCanvasElement} canvas Original image. |
| 121 * @param {number} opt_shrinkage Thumbnail should be at least this much smaller | 121 * @param {number} opt_shrinkage Thumbnail should be at least this much smaller |
| 122 * than the original image (in each dimension). | 122 * than the original image (in each dimension). |
| 123 * @return {HTMLCanvasElement} Thumbnail canvas | 123 * @return {HTMLCanvasElement} Thumbnail canvas. |
| 124 */ | 124 */ |
| 125 ImageEncoder.createThumbnail = function(canvas, opt_shrinkage) { | 125 ImageEncoder.createThumbnail = function(canvas, opt_shrinkage) { |
| 126 var MAX_THUMBNAIL_DIMENSION = 320; | 126 var MAX_THUMBNAIL_DIMENSION = 320; |
| 127 | 127 |
| 128 opt_shrinkage = Math.max(opt_shrinkage || 4, | 128 opt_shrinkage = Math.max(opt_shrinkage || 4, |
| 129 canvas.width / MAX_THUMBNAIL_DIMENSION, | 129 canvas.width / MAX_THUMBNAIL_DIMENSION, |
| 130 canvas.height / MAX_THUMBNAIL_DIMENSION); | 130 canvas.height / MAX_THUMBNAIL_DIMENSION); |
| 131 | 131 |
| 132 var thumbnailCanvas = canvas.ownerDocument.createElement('canvas'); | 132 var thumbnailCanvas = canvas.ownerDocument.createElement('canvas'); |
| 133 thumbnailCanvas.width = Math.round(canvas.width / opt_shrinkage); | 133 thumbnailCanvas.width = Math.round(canvas.width / opt_shrinkage); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 * @param {number} quality Thumbnail quality. | 185 * @param {number} quality Thumbnail quality. |
| 186 */ | 186 */ |
| 187 ImageEncoder.MetadataEncoder.prototype.setThumbnailData = | 187 ImageEncoder.MetadataEncoder.prototype.setThumbnailData = |
| 188 function(canvas, quality) { | 188 function(canvas, quality) { |
| 189 this.metadata_.thumbnailURL = | 189 this.metadata_.thumbnailURL = |
| 190 canvas.toDataURL(this.metadata_.mimeType, quality); | 190 canvas.toDataURL(this.metadata_.mimeType, quality); |
| 191 }; | 191 }; |
| 192 | 192 |
| 193 /** | 193 /** |
| 194 * Return a range where the metadata is (or should be) located. | 194 * Return a range where the metadata is (or should be) located. |
| 195 * @param {string} encodedImage //TODO(JSDOC) | 195 * @param {string} encodedImage //TODO(JSDOC). |
| 196 * @return {Object} An object with from and to properties. | 196 * @return {Object} An object with from and to properties. |
| 197 */ | 197 */ |
| 198 ImageEncoder.MetadataEncoder.prototype. | 198 ImageEncoder.MetadataEncoder.prototype. |
| 199 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; | 199 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; |
| 200 | 200 |
| 201 /** | 201 /** |
| 202 * Return serialized metadata ready to write to an image file. | 202 * Return serialized metadata ready to write to an image file. |
| 203 * The return type is optimized for passing to Blob.append. | 203 * The return type is optimized for passing to Blob.append. |
| 204 * @return {ArrayBuffer} //TODO(JSDOC) | 204 * @return {ArrayBuffer} //TODO(JSDOC). |
| 205 */ | 205 */ |
| 206 ImageEncoder.MetadataEncoder.prototype.encode = function() { | 206 ImageEncoder.MetadataEncoder.prototype.encode = function() { |
| 207 return new Uint8Array(0).buffer; | 207 return new Uint8Array(0).buffer; |
| 208 }; | 208 }; |
| OLD | NEW |