diff --git a/include/core/SkImageDeserializer.h b/include/core/SkImageDeserializer.h
index ba14226..a8e37b6 100644
--- a/include/core/SkImageDeserializer.h
+++ b/include/core/SkImageDeserializer.h
@@ -14,6 +14,7 @@
 class SkData;
 class SkImage;
 
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
 class SK_API SkImageDeserializer {
 public:
     virtual ~SkImageDeserializer() {}
@@ -32,5 +33,6 @@
     virtual sk_sp<SkImage> makeFromData(SkData*, const SkIRect* subset);
     virtual sk_sp<SkImage> makeFromMemory(const void* data, size_t length, const SkIRect* subset);
 };
+#endif
 
 #endif
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h
index 1e32636..cb8dcc2 100644
--- a/include/core/SkPicture.h
+++ b/include/core/SkPicture.h
@@ -19,7 +19,9 @@
 class SkData;
 struct SkDeserialProcs;
 class SkImage;
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
 class SkImageDeserializer;
+#endif
 class SkPath;
 class SkPictureData;
 class SkPixelSerializer;
@@ -58,11 +60,15 @@
      *  Any serialized images in the stream will be passed the image-deserializer, or if that is
      *  null, to the default deserializer that will call SkImage::MakeFromEncoded().
      */
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
     static sk_sp<SkPicture> MakeFromStream(SkStream*, SkImageDeserializer*);
+    static sk_sp<SkPicture> MakeFromData(const SkData* data, SkImageDeserializer*);
+    static sk_sp<SkPicture> MakeFromData(const void* data, size_t size, SkImageDeserializer*);
+#endif
+
     static sk_sp<SkPicture> MakeFromStream(SkStream*);
-    static sk_sp<SkPicture> MakeFromData(const void* data, size_t size,
-                                         SkImageDeserializer* = nullptr);
-    static sk_sp<SkPicture> MakeFromData(const SkData* data, SkImageDeserializer* = nullptr);
+    static sk_sp<SkPicture> MakeFromData(const SkData* data);
+    static sk_sp<SkPicture> MakeFromData(const void* data, size_t size);
 
     static sk_sp<SkPicture> MakeFromStream(SkStream*, const SkDeserialProcs& procs);
     static sk_sp<SkPicture> MakeFromData(const SkData* data, const SkDeserialProcs& procs);
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h
index b0b6fd9..0b1ae0c 100644
--- a/include/core/SkWriteBuffer.h
+++ b/include/core/SkWriteBuffer.h
@@ -9,8 +9,6 @@
 #ifndef SkWriteBuffer_DEFINED
 #define SkWriteBuffer_DEFINED
 
-#define SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
-
 #include "SkData.h"
 #include "SkImage.h"
 #include "SkPath.h"
@@ -20,9 +18,7 @@
 #include "SkWriter32.h"
 #include "../private/SkTHash.h"
 
-#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
 #include "SkPixelSerializer.h"
-#endif
 
 class SkBitmap;
 class SkDeduper;
@@ -157,9 +153,7 @@
     SkFactorySet* setFactoryRecorder(SkFactorySet*);
     SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
 
-#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
     void setPixelSerializer(sk_sp<SkPixelSerializer>);
-#endif
 
 private:
     const uint32_t fFlags;
@@ -171,9 +165,7 @@
     // Only used if we do not have an fFactorySet
     SkTHashMap<SkString, uint32_t> fFlattenableDict;
 
-#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
     sk_sp<SkPixelSerializer> fPS;
-#endif
 };
 
 #endif // SkWriteBuffer_DEFINED
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 2761c41..f5085a6 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -143,18 +143,13 @@
     return r.finishRecordingAsPicture();
 }
 
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
 sk_sp<SkPicture> SkPicture::MakeFromStream(SkStream* stream, SkImageDeserializer* factory) {
     SkDeserialProcs procs;
     procs.fImageProc = ImageDeserializer_SkDeserialImageProc;
     procs.fImageCtx  = factory;
     return MakeFromStream(stream, procs, nullptr);
 }
-
-sk_sp<SkPicture> SkPicture::MakeFromStream(SkStream* stream) {
-    SkImageDeserializer factory;
-    return MakeFromStream(stream, &factory);
-}
-
 sk_sp<SkPicture> SkPicture::MakeFromData(const void* data, size_t size,
                                          SkImageDeserializer* factory) {
     SkMemoryStream stream(data, size);
@@ -168,6 +163,28 @@
     SkMemoryStream stream(data->data(), data->size());
     return MakeFromStream(&stream, factory);
 }
+#endif
+
+sk_sp<SkPicture> SkPicture::MakeFromStream(SkStream* stream) {
+    return MakeFromStream(stream, SkDeserialProcs(), nullptr);
+}
+
+sk_sp<SkPicture> SkPicture::MakeFromData(const void* data, size_t size) {
+    if (!data) {
+        return nullptr;
+    }
+    SkMemoryStream stream(data, size);
+    return MakeFromStream(&stream, SkDeserialProcs(), nullptr);
+}
+
+sk_sp<SkPicture> SkPicture::MakeFromData(const SkData* data) {
+    if (!data) {
+        return nullptr;
+    }
+    SkMemoryStream stream(data->data(), data->size());
+    return MakeFromStream(&stream, SkDeserialProcs(), nullptr);
+}
+
 
 sk_sp<SkPicture> SkPicture::MakeFromData(const SkData* data, const SkDeserialProcs& procs) {
     if (!data) {
@@ -365,24 +382,13 @@
 
 //////////////////////////////////////////////////////////////////////////////////////////////////
 
+#include "SkReadBuffer.h"
+#include "SkWriteBuffer.h"
+
 sk_sp<SkData> PixelSerializer_SkSerialImageProc(SkImage* img, void* ctx) {
     SkASSERT(ctx);
     return img->encodeToData(static_cast<SkPixelSerializer*>(ctx));
 }
-
-sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void* data, size_t length, void* ctx) {
-    SkASSERT(ctx);
-    SkImageDeserializer* imd = static_cast<SkImageDeserializer*>(ctx);
-    const SkIRect* subset = nullptr;
-    return imd->makeFromMemory(data, length, subset);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
-
 void SkBinaryWriteBuffer::setPixelSerializer(sk_sp<SkPixelSerializer> ps) {
     fPS = ps;
     if (ps) {
@@ -394,6 +400,13 @@
     }
 }
 
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
+sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void* data, size_t length, void* ctx) {
+    SkASSERT(ctx);
+    SkImageDeserializer* imd = static_cast<SkImageDeserializer*>(ctx);
+    const SkIRect* subset = nullptr;
+    return imd->makeFromMemory(data, length, subset);
+}
 void SkReadBuffer::setImageDeserializer(SkImageDeserializer* factory) {
     if (factory) {
         fProcs.fImageProc = ImageDeserializer_SkDeserialImageProc;
diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h
index 4c0ca9b..28ea3d4 100644
--- a/src/core/SkReadBuffer.h
+++ b/src/core/SkReadBuffer.h
@@ -216,7 +216,7 @@
 
     void setDeserialProcs(const SkDeserialProcs& procs);
 
-#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
     void setImageDeserializer(SkImageDeserializer* factory);
 #endif
 
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 01aceab..31104d2 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -405,6 +405,7 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+#ifdef SK_SUPPORT_LEGACY_IMAGEDESERIALIZER
 #include "SkImageDeserializer.h"
 
 sk_sp<SkImage> SkImageDeserializer::makeFromData(SkData* data, const SkIRect* subset) {
@@ -414,6 +415,7 @@
                                                    const SkIRect* subset) {
     return SkImage::MakeFromEncoded(SkData::MakeWithCopy(data, length), subset);
 }
+#endif
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
