| 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..01c4e07ce2a0444f9063a12df5d4359218b65993 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
|
| @@ -49,7 +49,6 @@
|
| #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/PNGImageEncoder.h"
|
| #include "platform/image-encoders/WEBPImageEncoder.h"
|
| #include "platform/network/mime/MIMETypeRegistry.h"
|
| @@ -64,6 +63,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 +544,31 @@ 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") {
|
| + VectorWStream dst(encoded_image);
|
| +
|
| + 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 = static_cast<int>(quality * 100 + 0.5);
|
| + options.fAlphaOption = SkJpegEncoder::AlphaOption::kBlendOnBlack;
|
| + options.fBlendBehavior = SkTransferFunctionBehavior::kIgnore;
|
| + return SkJpegEncoder::Encode(&dst, 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,
|
|
|