Index: third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp |
diff --git a/third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp b/third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp |
index 708aa5a257c823d7bfe06f6a427981ad1780cd05..0b17b1b56dfefd2ec884b7ac9e74bd8bf5288cd7 100644 |
--- a/third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp |
+++ b/third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp |
@@ -20,6 +20,13 @@ bool ImageEncoder::Encode(Vector<unsigned char>* dst, |
return SkPngEncoder::Encode(&dst_stream, src, options); |
} |
+bool ImageEncoder::Encode(Vector<unsigned char>* dst, |
+ const SkPixmap& src, |
+ const SkWebpEncoder::Options& options) { |
+ VectorWStream dst_stream(dst); |
+ return SkWebpEncoder::Encode(&dst_stream, src, options); |
+} |
+ |
std::unique_ptr<ImageEncoder> ImageEncoder::Create( |
Vector<unsigned char>* dst, |
const SkPixmap& src, |
@@ -50,8 +57,28 @@ std::unique_ptr<ImageEncoder> ImageEncoder::Create( |
int ImageEncoder::ComputeJpegQuality(double quality) { |
int compression_quality = 92; // Default value |
- if (quality >= 0.0 && quality <= 1.0) |
+ if (0.0f <= quality && quality <= 1.0) |
compression_quality = static_cast<int>(quality * 100 + 0.5); |
return compression_quality; |
} |
+ |
+SkWebpEncoder::Options ImageEncoder::ComputeWebpOptions( |
+ double quality, |
+ SkTransferFunctionBehavior unpremulBehavior) { |
+ SkWebpEncoder::Options options; |
+ options.fUnpremulBehavior = unpremulBehavior; |
+ |
+ if (quality == 1.0) { |
+ // Choose a lossless encode. When performing a lossless encode, higher |
+ // quality corresponds to slower encoding and smaller output size. |
+ options.fCompression = SkWebpEncoder::Compression::kLossless; |
+ options.fQuality = 75.0f; |
+ } else { |
+ options.fQuality = 80.0f; // Default value |
+ if (0.0f <= quality && quality <= 1.0) |
+ options.fQuality = quality * 100.0f; |
+ } |
+ |
+ return options; |
+} |
}; |