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 // TODO:(kaznacheev) Share the EXIF constants with exif_parser.js | 5 // TODO:(kaznacheev) Share the EXIF constants with exif_parser.js |
6 var EXIF_MARK_SOS = 0xffda; // Start of "stream" (the actual image data). | 6 var EXIF_MARK_SOS = 0xffda; // Start of "stream" (the actual image data). |
7 var EXIF_MARK_SOI = 0xffd8; // Start of image data. | 7 var EXIF_MARK_SOI = 0xffd8; // Start of image data. |
8 var EXIF_MARK_EOI = 0xffd9; // End of image data. | 8 var EXIF_MARK_EOI = 0xffd9; // End of image data. |
9 | 9 |
10 var EXIF_MARK_APP0 = 0xffe0; // APP0 block, most commonly JFIF data. | 10 var EXIF_MARK_APP0 = 0xffe0; // APP0 block, most commonly JFIF data. |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 this.metadata_.width = canvas.width; | 71 this.metadata_.width = canvas.width; |
72 this.metadata_.height = canvas.height; | 72 this.metadata_.height = canvas.height; |
73 | 73 |
74 // Always save in default orientation. | 74 // Always save in default orientation. |
75 delete this.metadata_.imageTransform; | 75 delete this.metadata_.imageTransform; |
76 ExifEncoder.findOrCreateTag(image, EXIF_TAG_ORIENTATION).value = 1; | 76 ExifEncoder.findOrCreateTag(image, EXIF_TAG_ORIENTATION).value = 1; |
77 }; | 77 }; |
78 | 78 |
79 | 79 |
80 /** | 80 /** |
81 * @param {HTMLCanvasElement} canvas Thumbnail canvas | 81 * @param {HTMLCanvasElement} canvas Thumbnail canvas. |
82 * @param {number} quality (0..1] Thumbnail encoding quality | 82 * @param {number} quality (0..1] Thumbnail encoding quality. |
83 */ | 83 */ |
84 ExifEncoder.prototype.setThumbnailData = function(canvas, quality) { | 84 ExifEncoder.prototype.setThumbnailData = function(canvas, quality) { |
85 // Empirical formula with reasonable behavior: | 85 // Empirical formula with reasonable behavior: |
86 // 10K for 1Mpix, 30K for 5Mpix, 50K for 9Mpix and up. | 86 // 10K for 1Mpix, 30K for 5Mpix, 50K for 9Mpix and up. |
87 var pixelCount = this.metadata_.width * this.metadata_.height; | 87 var pixelCount = this.metadata_.width * this.metadata_.height; |
88 var maxEncodedSize = 5000 * Math.min(10, 1 + pixelCount / 1000000); | 88 var maxEncodedSize = 5000 * Math.min(10, 1 + pixelCount / 1000000); |
89 | 89 |
90 var DATA_URL_PREFIX = 'data:' + this.mimeType + ';base64,'; | 90 var DATA_URL_PREFIX = 'data:' + this.mimeType + ';base64,'; |
91 var BASE64_BLOAT = 4 / 3; | 91 var BASE64_BLOAT = 4 / 3; |
92 var maxDataURLLength = | 92 var maxDataURLLength = |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 430 |
431 /** | 431 /** |
432 * Bug endian byte order. | 432 * Bug endian byte order. |
433 * @type {number} | 433 * @type {number} |
434 */ | 434 */ |
435 ByteWriter.BIG_ENDIAN = 1; | 435 ByteWriter.BIG_ENDIAN = 1; |
436 | 436 |
437 /** | 437 /** |
438 * Set the byte ordering for future writes. | 438 * Set the byte ordering for future writes. |
439 * @param {number} order ByteOrder to use {ByteWriter.LITTLE_ENDIAN} | 439 * @param {number} order ByteOrder to use {ByteWriter.LITTLE_ENDIAN} |
440 * or {ByteWriter.BIG_ENDIAN} | 440 * or {ByteWriter.BIG_ENDIAN}. |
441 */ | 441 */ |
442 ByteWriter.prototype.setByteOrder = function(order) { | 442 ByteWriter.prototype.setByteOrder = function(order) { |
443 this.littleEndian_ = (order == ByteWriter.LITTLE_ENDIAN); | 443 this.littleEndian_ = (order == ByteWriter.LITTLE_ENDIAN); |
444 }; | 444 }; |
445 | 445 |
446 /** | 446 /** |
447 * @return {number} the current write position. | 447 * @return {number} the current write position. |
448 */ | 448 */ |
449 ByteWriter.prototype.tell = function() { return this.pos_ }; | 449 ByteWriter.prototype.tell = function() { return this.pos_ }; |
450 | 450 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 }; | 558 }; |
559 | 559 |
560 /** | 560 /** |
561 * Check if every forward has been resolved, throw and error if not. | 561 * Check if every forward has been resolved, throw and error if not. |
562 */ | 562 */ |
563 ByteWriter.prototype.checkResolved = function() { | 563 ByteWriter.prototype.checkResolved = function() { |
564 for (var key in this.forwards_) { | 564 for (var key in this.forwards_) { |
565 throw new Error('Unresolved forward pointer ' + key.toString(16)); | 565 throw new Error('Unresolved forward pointer ' + key.toString(16)); |
566 } | 566 } |
567 }; | 567 }; |
OLD | NEW |