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