OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 ImageEncoder.MAX_THUMBNAIL_DIMENSION = 320; | 10 ImageEncoder.MAX_THUMBNAIL_DIMENSION = 320; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 * @param {BlobBuilder} blobBuilder | 64 * @param {BlobBuilder} blobBuilder |
65 * @param {HTMLCanvasElement} canvas The canvas with the image to be encoded. | 65 * @param {HTMLCanvasElement} canvas The canvas with the image to be encoded. |
66 * @param {ImageEncoder.MetadataEncoder} metadataEncoder | 66 * @param {ImageEncoder.MetadataEncoder} metadataEncoder |
67 * @param {Number} quality (0..1], Encoding quality, default is 0.5 | 67 * @param {Number} quality (0..1], Encoding quality, default is 0.5 |
68 */ | 68 */ |
69 ImageEncoder.buildBlob = function( | 69 ImageEncoder.buildBlob = function( |
70 blobBuilder, canvas, metadataEncoder, quality) { | 70 blobBuilder, canvas, metadataEncoder, quality) { |
71 | 71 |
72 quality = quality || 0.5; | 72 quality = quality || 0.5; |
73 | 73 |
| 74 ImageUtil.trace.resetTimer('dataurl'); |
74 // WebKit does not support canvas.toBlob yet so canvas.toDataURL is | 75 // WebKit does not support canvas.toBlob yet so canvas.toDataURL is |
75 // the only way to use the Chrome built-in image encoder. | 76 // the only way to use the Chrome built-in image encoder. |
76 var dataURL = | 77 var dataURL = |
77 canvas.toDataURL(metadataEncoder.getMetadata().mimeType, quality); | 78 canvas.toDataURL(metadataEncoder.getMetadata().mimeType, quality); |
| 79 ImageUtil.trace.reportTimer('dataurl'); |
78 | 80 |
79 var encodedImage = ImageEncoder.decodeDataURL(dataURL); | 81 var encodedImage = ImageEncoder.decodeDataURL(dataURL); |
80 | 82 |
81 var encodedMetadata = metadataEncoder.encode(); | 83 var encodedMetadata = metadataEncoder.encode(); |
82 | 84 |
83 ImageUtil.trace.resetTimer('blob'); | 85 ImageUtil.trace.resetTimer('blob'); |
84 if (encodedMetadata.byteLength != 0) { | 86 if (encodedMetadata.byteLength != 0) { |
85 var metadataRange = metadataEncoder.findInsertionRange(encodedImage); | 87 var metadataRange = metadataEncoder.findInsertionRange(encodedImage); |
86 blobBuilder.append(ImageEncoder.stringToArrayBuffer( | 88 blobBuilder.append(ImageEncoder.stringToArrayBuffer( |
87 encodedImage, 0, metadataRange.from)); | 89 encodedImage, 0, metadataRange.from)); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; | 198 findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; |
197 | 199 |
198 /** | 200 /** |
199 * Return serialized metadata ready to write to an image file. | 201 * Return serialized metadata ready to write to an image file. |
200 * The return type is optimized for passing to Blob.append. | 202 * The return type is optimized for passing to Blob.append. |
201 * @return {ArrayBuffer} | 203 * @return {ArrayBuffer} |
202 */ | 204 */ |
203 ImageEncoder.MetadataEncoder.prototype.encode = function() { | 205 ImageEncoder.MetadataEncoder.prototype.encode = function() { |
204 return new Uint8Array(0).buffer; | 206 return new Uint8Array(0).buffer; |
205 }; | 207 }; |
OLD | NEW |