| 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 /** |
| 11 * @type {Array.<Object>} |
| 12 */ |
| 11 ImageEncoder.metadataEncoders = {}; | 13 ImageEncoder.metadataEncoders = {}; |
| 12 | 14 |
| 13 //TODO(JSDOC) | 15 /** |
| 16 * @param {function(new:ImageEncoder.MetadataEncoder)} constructor |
| 17 * //TODO(JSDOC). |
| 18 * @param {string} mimeType //TODO(JSDOC). |
| 19 */ |
| 14 ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { | 20 ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { |
| 15 ImageEncoder.metadataEncoders[mimeType] = constructor; | 21 ImageEncoder.metadataEncoders[mimeType] = constructor; |
| 16 }; | 22 }; |
| 17 | 23 |
| 18 /** | 24 /** |
| 19 * Create a metadata encoder. | 25 * Create a metadata encoder. |
| 20 * | 26 * |
| 21 * The encoder will own and modify a copy of the original metadata. | 27 * The encoder will own and modify a copy of the original metadata. |
| 22 * | 28 * |
| 23 * @param {Object} metadata Original metadata. | 29 * @param {Object} metadata Original metadata. |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 thumbnailCanvas.height = Math.round(canvas.height / opt_shrinkage); | 140 thumbnailCanvas.height = Math.round(canvas.height / opt_shrinkage); |
| 135 | 141 |
| 136 var context = thumbnailCanvas.getContext('2d'); | 142 var context = thumbnailCanvas.getContext('2d'); |
| 137 context.drawImage(canvas, | 143 context.drawImage(canvas, |
| 138 0, 0, canvas.width, canvas.height, | 144 0, 0, canvas.width, canvas.height, |
| 139 0, 0, thumbnailCanvas.width, thumbnailCanvas.height); | 145 0, 0, thumbnailCanvas.width, thumbnailCanvas.height); |
| 140 | 146 |
| 141 return thumbnailCanvas; | 147 return thumbnailCanvas; |
| 142 }; | 148 }; |
| 143 | 149 |
| 150 /** |
| 151 * TODO(JSDOC) |
| 152 * @param {string} string //TODO(JSDOC). |
| 153 * @param {number} from //TODO(JSDOC). |
| 154 * @param {number} to //TODO(JSDOC). |
| 155 * @return {ArrayBuffer} //TODO(JSDOC). |
| 156 */ |
| 144 ImageEncoder.stringToArrayBuffer = function(string, from, to) { | 157 ImageEncoder.stringToArrayBuffer = function(string, from, to) { |
| 145 var size = to - from; | 158 var size = to - from; |
| 146 var array = new Uint8Array(size); | 159 var array = new Uint8Array(size); |
| 147 for (var i = 0; i != size; i++) { | 160 for (var i = 0; i != size; i++) { |
| 148 array[i] = string.charCodeAt(from + i); | 161 array[i] = string.charCodeAt(from + i); |
| 149 } | 162 } |
| 150 return array.buffer; | 163 return array.buffer; |
| 151 }; | 164 }; |
| 152 | 165 |
| 153 /** | 166 /** |
| 154 * A base class for a metadata encoder. | 167 * A base class for a metadata encoder. |
| 155 * | 168 * |
| 156 * Serves as a default metadata encoder for images that none of the metadata | 169 * Serves as a default metadata encoder for images that none of the metadata |
| 157 * parsers recognized. | 170 * parsers recognized. |
| 158 * | 171 * |
| 159 * @constructor | 172 * @constructor |
| 160 * @param {Object} original_metadata Starting metadata. | 173 * @param {Object} original_metadata Starting metadata. |
| 161 */ | 174 */ |
| 162 ImageEncoder.MetadataEncoder = function(original_metadata) { | 175 ImageEncoder.MetadataEncoder = function(original_metadata) { |
| 163 this.metadata_ = ImageUtil.deepCopy(original_metadata) || {}; | 176 this.metadata_ = ImageUtil.deepCopy(original_metadata) || {}; |
| 164 if (this.metadata_.mimeType != 'image/jpeg') { | 177 if (this.metadata_.mimeType != 'image/jpeg') { |
| 165 // Chrome can only encode JPEG and PNG. Force PNG mime type so that we | 178 // Chrome can only encode JPEG and PNG. Force PNG mime type so that we |
| 166 // can save to file and generate a thumbnail. | 179 // can save to file and generate a thumbnail. |
| 167 this.metadata_.mimeType = 'image/png'; | 180 this.metadata_.mimeType = 'image/png'; |
| 168 } | 181 } |
| 169 }; | 182 }; |
| 170 | 183 |
| 184 /** |
| 185 * TODO(JSDOC) |
| 186 * @return {Object} //TODO(JSDOC). |
| 187 */ |
| 171 ImageEncoder.MetadataEncoder.prototype.getMetadata = function() { | 188 ImageEncoder.MetadataEncoder.prototype.getMetadata = function() { |
| 172 return this.metadata_; | 189 return this.metadata_; |
| 173 }; | 190 }; |
| 174 | 191 |
| 175 /** | 192 /** |
| 176 * @param {HTMLCanvasElement|Object} canvas Canvas or or anything with | 193 * @param {HTMLCanvasElement|Object} canvas Canvas or or anything with |
| 177 * width and height properties. | 194 * width and height properties. |
| 178 */ | 195 */ |
| 179 ImageEncoder.MetadataEncoder.prototype.setImageData = function(canvas) { | 196 ImageEncoder.MetadataEncoder.prototype.setImageData = function(canvas) { |
| 180 this.metadata_.width = canvas.width; | 197 this.metadata_.width = canvas.width; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 200 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; | 217 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; |
| 201 | 218 |
| 202 /** | 219 /** |
| 203 * Return serialized metadata ready to write to an image file. | 220 * Return serialized metadata ready to write to an image file. |
| 204 * The return type is optimized for passing to Blob.append. | 221 * The return type is optimized for passing to Blob.append. |
| 205 * @return {ArrayBuffer} //TODO(JSDOC). | 222 * @return {ArrayBuffer} //TODO(JSDOC). |
| 206 */ | 223 */ |
| 207 ImageEncoder.MetadataEncoder.prototype.encode = function() { | 224 ImageEncoder.MetadataEncoder.prototype.encode = function() { |
| 208 return new Uint8Array(0).buffer; | 225 return new Uint8Array(0).buffer; |
| 209 }; | 226 }; |
| OLD | NEW |