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

Unified Diff: third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp

Issue 2878333004: Use SkJpegEncoder in WebKit platform (Closed)
Patch Set: Create instead of Make 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/graphics/ImageBuffer.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
index 2b13bd1747c820da67f00fc40da2db7a71ec8fb9..15c3c56cc34b6ac0f2bd29b08383f8243ebbb672 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
@@ -49,7 +49,7 @@
#include "platform/graphics/paint/PaintImage.h"
#include "platform/graphics/paint/PaintRecord.h"
#include "platform/graphics/skia/SkiaUtils.h"
-#include "platform/image-encoders/JPEGImageEncoder.h"
+#include "platform/image-encoders/ImageEncoder.h"
#include "platform/image-encoders/PNGImageEncoder.h"
#include "platform/image-encoders/WEBPImageEncoder.h"
#include "platform/network/mime/MIMETypeRegistry.h"
@@ -64,6 +64,7 @@
#include "public/platform/WebGraphicsContext3DProvider.h"
#include "skia/ext/texture_handle.h"
#include "third_party/skia/include/core/SkSwizzle.h"
+#include "third_party/skia/include/encode/SkJpegEncoder.h"
#include "third_party/skia/include/gpu/GrContext.h"
#include "third_party/skia/include/gpu/gl/GrGLTypes.h"
@@ -544,21 +545,32 @@ bool ImageDataBuffer::EncodeImage(const String& mime_type,
const double& quality,
Vector<unsigned char>* encoded_image) const {
if (mime_type == "image/jpeg") {
- if (!JPEGImageEncoder::Encode(*this, quality, encoded_image))
- return false;
- } else if (mime_type == "image/webp") {
+ SkImageInfo info =
+ SkImageInfo::Make(Width(), Height(), kRGBA_8888_SkColorType,
+ kUnpremul_SkAlphaType, nullptr);
+ size_t rowBytes =
+ Width() * SkColorTypeBytesPerPixel(kRGBA_8888_SkColorType);
+ SkPixmap src(info, Pixels(), rowBytes);
+
+ SkJpegEncoder::Options options;
+ options.fQuality = ImageEncoder::ComputeJpegQuality(quality);
+ options.fAlphaOption = SkJpegEncoder::AlphaOption::kBlendOnBlack;
+ options.fBlendBehavior = SkTransferFunctionBehavior::kIgnore;
+ if (options.fQuality == 100) {
+ options.fDownsample = SkJpegEncoder::Downsample::k444;
+ }
+ return ImageEncoder::Encode(encoded_image, src, options);
+ }
+
+ if (mime_type == "image/webp") {
int compression_quality = WEBPImageEncoder::kDefaultCompressionQuality;
if (quality >= 0.0 && quality <= 1.0)
compression_quality = static_cast<int>(quality * 100 + 0.5);
- if (!WEBPImageEncoder::Encode(*this, compression_quality, encoded_image))
- return false;
- } else {
- if (!PNGImageEncoder::Encode(*this, encoded_image))
- return false;
- DCHECK_EQ(mime_type, "image/png");
+ return WEBPImageEncoder::Encode(*this, compression_quality, encoded_image);
}
- return true;
+ DCHECK_EQ(mime_type, "image/png");
+ return PNGImageEncoder::Encode(*this, encoded_image);
}
String ImageDataBuffer::ToDataURL(const String& mime_type,
« no previous file with comments | « third_party/WebKit/Source/platform/BUILD.gn ('k') | third_party/WebKit/Source/platform/image-encoders/ImageEncoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698