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

Unified Diff: third_party/WebKit/Source/platform/image-encoders/ImageEncoder.cpp

Issue 2891373002: Use SkPngEncoder and SkWebpEncoder in WebKit platform (Closed)
Patch Set: Adjust comments Created 3 years, 7 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: 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;
+}
};

Powered by Google App Engine
This is Rietveld 408576698