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 |