Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: ui/file_manager/gallery/js/image_editor/image_encoder.js

Issue 936143003: Start to use new metadata item in ImageEncoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/gallery/js/image_editor/image_encoder.js
diff --git a/ui/file_manager/gallery/js/image_editor/image_encoder.js b/ui/file_manager/gallery/js/image_editor/image_encoder.js
index f7b900ce74572dc7f51a30a7ec5bb1897d8d94ea..5d783fb761449f50e55cdbdf8c4dbf8ece236c1b 100644
--- a/ui/file_manager/gallery/js/image_editor/image_encoder.js
+++ b/ui/file_manager/gallery/js/image_editor/image_encoder.js
@@ -22,14 +22,15 @@ ImageEncoder.MIN_IMAGE_DIMENSION_FOR_THUMBNAIL =
/**
* Metadata encoders.
- * @type {!Object.<string,function(new:ImageEncoder.MetadataEncoder,!Object)>}
+ * @type {!Object.<string,function(
+ * new:ImageEncoder.MetadataEncoder,!MetadataItem)>}
* @const
*/
ImageEncoder.metadataEncoders = {};
/**
* Registers metadata encoder.
- * @param {function(new:ImageEncoder.MetadataEncoder,!Object)} constructor
+ * @param {function(new:ImageEncoder.MetadataEncoder,!MetadataItem)} constructor
* Constructor of a metadata encoder.
* @param {string} mimeType Mime type of the metadata encoder.
*/
@@ -42,12 +43,12 @@ ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) {
*
* The encoder will own and modify a copy of the original metadata.
*
- * @param {!Object} metadata Original metadata.
+ * @param {!MetadataItem} metadata Original metadata.
* @return {!ImageEncoder.MetadataEncoder} Created metadata encoder.
*/
ImageEncoder.createMetadataEncoder = function(metadata) {
var constructor =
- (metadata && ImageEncoder.metadataEncoders[metadata.media.mimeType]) ||
+ ImageEncoder.metadataEncoders[metadata.mediaMimeType || ""] ||
ImageEncoder.MetadataEncoder;
return new constructor(metadata);
};
@@ -56,16 +57,14 @@ ImageEncoder.createMetadataEncoder = function(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 {!MetadataItem} metadata Original metadata.
* @param {!HTMLCanvasElement} canvas Canvas to use for metadata.
* @param {number} thumbnailQuality Encoding quality of a thumbnail.
- * @param {Date=} opt_modificationDateTime Modification date time of an image.
* @return {!ImageEncoder.MetadataEncoder} Encoder with encoded metadata.
*/
-ImageEncoder.encodeMetadata = function(
- metadata, canvas, thumbnailQuality, opt_modificationDateTime) {
+ImageEncoder.encodeMetadata = function(metadata, canvas, thumbnailQuality) {
var encoder = ImageEncoder.createMetadataEncoder(metadata);
- encoder.setImageData(canvas, opt_modificationDateTime);
+ encoder.setImageData(canvas);
encoder.setThumbnailData(ImageEncoder.createThumbnail(canvas),
thumbnailQuality);
return encoder;
@@ -82,8 +81,7 @@ ImageEncoder.getBlob = function(canvas, metadataEncoder, imageQuality) {
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().media.mimeType,
- imageQuality);
+ var dataURL = canvas.toDataURL(metadataEncoder.mimeType, imageQuality);
ImageUtil.trace.reportTimer('dataurl');
var encodedImage = ImageEncoder.decodeDataURL(dataURL);
@@ -112,8 +110,7 @@ ImageEncoder.getBlob = function(canvas, metadataEncoder, imageQuality) {
appendSlice(ImageEncoder.stringToArrayBuffer(
encodedImage, 0, encodedImage.length));
}
- var blob = new Blob(slices,
- {type: metadataEncoder.getMetadata().media.mimeType});
+ var blob = new Blob(slices, {type: metadataEncoder.mimeType});
ImageUtil.trace.reportTimer('blob');
return blob;
};
@@ -181,21 +178,34 @@ ImageEncoder.stringToArrayBuffer = function(string, from, to) {
* Serves as a default metadata encoder for images that none of the metadata
* parsers recognized.
*
- * @param {!Object} original_metadata Starting metadata.
+ * @param {!MetadataItem} originalMetadata Starting metadata.
* @constructor
* @struct
*/
-ImageEncoder.MetadataEncoder = function(original_metadata) {
- this.metadata_ = MetadataCache.cloneMetadata(original_metadata) || {};
- if (ImageEncoder.MetadataEncoder.getMimeType_(this.metadata_) !==
- 'image/jpeg') {
- // Chrome can only encode JPEG and PNG. Force PNG mime type so that we
- // can save to file and generate a thumbnail.
- // TODO(yawano) Change this not to modify metadata. Mime type comes from
- // different fields depending on the conditions. Just overriding
- // media.mimeType and use the modified metadata could cause a problem.
- this.metadata_.media.mimeType = 'image/png';
- }
+ImageEncoder.MetadataEncoder = function(originalMetadata) {
+ var mimeType = ImageEncoder.MetadataEncoder.getMimeType_(originalMetadata);
+
+ /**
+ * Chrome can only encode JPEG and PNG. Force PNG mime type so that we
+ * can save to file and generate a thumbnail.
+ * @public {string}
+ */
+ this.mimeType = mimeType === 'image/jpeg' ? 'image/jpeg' : 'image/png';
+
+ /**
+ * @protected {string}
+ */
+ this.thumbnailDataUrl = '';
+
+ /**
+ * @protected {number}
+ */
+ this.imageWidth = 0;
+
+ /**
+ * @protected {number}
+ */
+ this.imageHeight = 0;
};
/**
@@ -203,41 +213,27 @@ ImageEncoder.MetadataEncoder = function(original_metadata) {
* fails, it falls back to external.contentMimeType. If both fields are
* undefined, it means that metadata is broken. Then it throws an exception.
*
- * @param {!Object} metadata Metadata.
+ * @param {!MetadataItem} metadata Metadata.
* @return {string} Mime type.
* @private
*/
ImageEncoder.MetadataEncoder.getMimeType_ = function(metadata) {
- if (metadata.media.mimeType)
- return metadata.media.mimeType;
- else if (metadata.external.contentMimeType)
- return metadata.external.contentMimeType;
+ if (metadata.mediaMimeType)
+ return metadata.mediaMimeType;
+ else if (metadata.contentMimeType)
+ return metadata.contentMimeType;
assertNotReached();
};
/**
- * Returns metadata.
- * @return {!Object} A metadata.
- *
- * TODO(yawano): MetadataEncoder.getMetadata seems not to be used anymore.
- * Investigate this, and remove if possible. Should not modify a metadata by
- * using an encoder.
- */
-ImageEncoder.MetadataEncoder.prototype.getMetadata = function() {
- return this.metadata_;
-};
-
-/**
* Sets an image data.
* @param {!HTMLCanvasElement} canvas Canvas or anything with width and height
* properties.
- * @param {Date=} opt_modificationDateTime Modification date time of an image.
*/
-ImageEncoder.MetadataEncoder.prototype.setImageData =
- function(canvas, opt_modificationDateTime) {
- this.metadata_.width = canvas.width;
- this.metadata_.height = canvas.height;
+ImageEncoder.MetadataEncoder.prototype.setImageData = function(canvas) {
+ this.imageWidth = canvas.width;
+ this.imageHeight = canvas.height;
};
/**
@@ -247,9 +243,8 @@ ImageEncoder.MetadataEncoder.prototype.setImageData =
*/
ImageEncoder.MetadataEncoder.prototype.setThumbnailData =
function(canvas, quality) {
- this.metadata_.thumbnailURL =
- canvas ? canvas.toDataURL(this.metadata_.media.mimeType, quality) : '';
- delete this.metadata_.thumbnailTransform;
+ this.thumbnailDataUrl =
+ canvas ? canvas.toDataURL(this.mimeType, quality) : '';
};
/**

Powered by Google App Engine
This is Rietveld 408576698