Index: chrome/browser/resources/file_manager/js/image_editor/image_encoder.js |
diff --git a/chrome/browser/resources/file_manager/js/image_editor/image_encoder.js b/chrome/browser/resources/file_manager/js/image_editor/image_encoder.js |
deleted file mode 100644 |
index 1c96b1fe326fb9a8f146cdef7dab0338a6217854..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/image_editor/image_encoder.js |
+++ /dev/null |
@@ -1,228 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-'use strict'; |
- |
-/** |
- * A namespace class for image encoding functions. All methods are static. |
- */ |
-function ImageEncoder() {} |
- |
-/** |
- * @type {Array.<Object>} |
- */ |
-ImageEncoder.metadataEncoders = {}; |
- |
-/** |
- * @param {function(new:ImageEncoder.MetadataEncoder)} constructor |
- * // TODO(JSDOC). |
- * @param {string} mimeType // TODO(JSDOC). |
- */ |
-ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { |
- ImageEncoder.metadataEncoders[mimeType] = constructor; |
-}; |
- |
-/** |
- * Create a metadata encoder. |
- * |
- * The encoder will own and modify a copy of the original metadata. |
- * |
- * @param {Object} metadata Original metadata. |
- * @return {ImageEncoder.MetadataEncoder} Created metadata encoder. |
- */ |
-ImageEncoder.createMetadataEncoder = function(metadata) { |
- var constructor = ImageEncoder.metadataEncoders[metadata.mimeType] || |
- ImageEncoder.MetadataEncoder; |
- return new constructor(metadata); |
-}; |
- |
- |
-/** |
- * Create a metadata encoder object holding a copy of metadata |
- * modified according to the properties of the supplied image. |
- * |
- * @param {Object} metadata Original metadata. |
- * @param {HTMLCanvasElement} canvas Canvas to use for metadata. |
- * @param {number} quality Encoding quality (defaults to 1). |
- * @return {ImageEncoder.MetadataEncoder} Encoder with encoded metadata. |
- */ |
-ImageEncoder.encodeMetadata = function(metadata, canvas, quality) { |
- var encoder = ImageEncoder.createMetadataEncoder(metadata); |
- encoder.setImageData(canvas); |
- encoder.setThumbnailData(ImageEncoder.createThumbnail(canvas), quality || 1); |
- return encoder; |
-}; |
- |
- |
-/** |
- * Return a blob with the encoded image with metadata inserted. |
- * @param {HTMLCanvasElement} canvas The canvas with the image to be encoded. |
- * @param {ImageEncoder.MetadataEncoder} metadataEncoder Encoder to use. |
- * @param {number} quality (0..1], Encoding quality, defaults to 0.9. |
- * @return {Blob} encoded data. |
- */ |
-ImageEncoder.getBlob = function(canvas, metadataEncoder, quality) { |
- // Contrary to what one might think 1.0 is not a good default. Opening and |
- // saving an typical photo taken with consumer camera increases its file size |
- // by 50-100%. |
- // Experiments show that 0.9 is much better. It shrinks some photos a bit, |
- // keeps others about the same size, but does not visibly lower the quality. |
- quality = quality || 0.9; |
- |
- ImageUtil.trace.resetTimer('dataurl'); |
- // WebKit does not support canvas.toBlob yet so canvas.toDataURL is |
- // the only way to use the Chrome built-in image encoder. |
- var dataURL = |
- canvas.toDataURL(metadataEncoder.getMetadata().mimeType, quality); |
- ImageUtil.trace.reportTimer('dataurl'); |
- |
- var encodedImage = ImageEncoder.decodeDataURL(dataURL); |
- |
- var encodedMetadata = metadataEncoder.encode(); |
- |
- var slices = []; |
- |
- // TODO(kaznacheev): refactor |stringToArrayBuffer| and |encode| to return |
- // arrays instead of array buffers. |
- function appendSlice(arrayBuffer) { |
- slices.push(new DataView(arrayBuffer)); |
- } |
- |
- ImageUtil.trace.resetTimer('blob'); |
- if (encodedMetadata.byteLength != 0) { |
- var metadataRange = metadataEncoder.findInsertionRange(encodedImage); |
- appendSlice(ImageEncoder.stringToArrayBuffer( |
- encodedImage, 0, metadataRange.from)); |
- |
- appendSlice(metadataEncoder.encode()); |
- |
- appendSlice(ImageEncoder.stringToArrayBuffer( |
- encodedImage, metadataRange.to, encodedImage.length)); |
- } else { |
- appendSlice(ImageEncoder.stringToArrayBuffer( |
- encodedImage, 0, encodedImage.length)); |
- } |
- var blob = new Blob(slices, {type: metadataEncoder.getMetadata().mimeType}); |
- ImageUtil.trace.reportTimer('blob'); |
- return blob; |
-}; |
- |
-/** |
- * Decode a dataURL into a binary string containing the encoded image. |
- * |
- * Why return a string? Calling atob and having the rest of the code deal |
- * with a string is several times faster than decoding base64 in Javascript. |
- * |
- * @param {string} dataURL Data URL to decode. |
- * @return {string} A binary string (char codes are the actual byte values). |
- */ |
-ImageEncoder.decodeDataURL = function(dataURL) { |
- // Skip the prefix ('data:image/<type>;base64,') |
- var base64string = dataURL.substring(dataURL.indexOf(',') + 1); |
- return atob(base64string); |
-}; |
- |
-/** |
- * Return a thumbnail for an image. |
- * @param {HTMLCanvasElement} canvas Original image. |
- * @param {number=} opt_shrinkage Thumbnail should be at least this much smaller |
- * than the original image (in each dimension). |
- * @return {HTMLCanvasElement} Thumbnail canvas. |
- */ |
-ImageEncoder.createThumbnail = function(canvas, opt_shrinkage) { |
- var MAX_THUMBNAIL_DIMENSION = 320; |
- |
- opt_shrinkage = Math.max(opt_shrinkage || 4, |
- canvas.width / MAX_THUMBNAIL_DIMENSION, |
- canvas.height / MAX_THUMBNAIL_DIMENSION); |
- |
- var thumbnailCanvas = canvas.ownerDocument.createElement('canvas'); |
- thumbnailCanvas.width = Math.round(canvas.width / opt_shrinkage); |
- thumbnailCanvas.height = Math.round(canvas.height / opt_shrinkage); |
- |
- var context = thumbnailCanvas.getContext('2d'); |
- context.drawImage(canvas, |
- 0, 0, canvas.width, canvas.height, |
- 0, 0, thumbnailCanvas.width, thumbnailCanvas.height); |
- |
- return thumbnailCanvas; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @param {string} string // TODO(JSDOC). |
- * @param {number} from // TODO(JSDOC). |
- * @param {number} to // TODO(JSDOC). |
- * @return {ArrayBuffer} // TODO(JSDOC). |
- */ |
-ImageEncoder.stringToArrayBuffer = function(string, from, to) { |
- var size = to - from; |
- var array = new Uint8Array(size); |
- for (var i = 0; i != size; i++) { |
- array[i] = string.charCodeAt(from + i); |
- } |
- return array.buffer; |
-}; |
- |
-/** |
- * A base class for a metadata encoder. |
- * |
- * Serves as a default metadata encoder for images that none of the metadata |
- * parsers recognized. |
- * |
- * @param {Object} original_metadata Starting metadata. |
- * @constructor |
- */ |
-ImageEncoder.MetadataEncoder = function(original_metadata) { |
- this.metadata_ = MetadataCache.cloneMetadata(original_metadata) || {}; |
- if (this.metadata_.mimeType != 'image/jpeg') { |
- // Chrome can only encode JPEG and PNG. Force PNG mime type so that we |
- // can save to file and generate a thumbnail. |
- this.metadata_.mimeType = 'image/png'; |
- } |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {Object} // TODO(JSDOC). |
- */ |
-ImageEncoder.MetadataEncoder.prototype.getMetadata = function() { |
- return this.metadata_; |
-}; |
- |
-/** |
- * @param {HTMLCanvasElement|Object} canvas Canvas or or anything with |
- * width and height properties. |
- */ |
-ImageEncoder.MetadataEncoder.prototype.setImageData = function(canvas) { |
- this.metadata_.width = canvas.width; |
- this.metadata_.height = canvas.height; |
-}; |
- |
-/** |
- * @param {HTMLCanvasElement} canvas Canvas to use as thumbnail. |
- * @param {number} quality Thumbnail quality. |
- */ |
-ImageEncoder.MetadataEncoder.prototype.setThumbnailData = |
- function(canvas, quality) { |
- this.metadata_.thumbnailURL = |
- canvas.toDataURL(this.metadata_.mimeType, quality); |
-}; |
- |
-/** |
- * Return a range where the metadata is (or should be) located. |
- * @param {string} encodedImage // TODO(JSDOC). |
- * @return {Object} An object with from and to properties. |
- */ |
-ImageEncoder.MetadataEncoder.prototype. |
- findInsertionRange = function(encodedImage) { return {from: 0, to: 0} }; |
- |
-/** |
- * Return serialized metadata ready to write to an image file. |
- * The return type is optimized for passing to Blob.append. |
- * @return {ArrayBuffer} // TODO(JSDOC). |
- */ |
-ImageEncoder.MetadataEncoder.prototype.encode = function() { |
- return new Uint8Array(0).buffer; |
-}; |