diff --git a/gm/showmiplevels.cpp b/gm/showmiplevels.cpp
index 8d81c9b..169e3cb 100644
--- a/gm/showmiplevels.cpp
+++ b/gm/showmiplevels.cpp
@@ -333,7 +333,7 @@
             auto surf = SkSurface::MakeRasterDirect(builder.level(i));
             surf->getCanvas()->drawColor(colors[i % SK_ARRAY_COUNT(colors)]);
         }
-        fImg = fImg->withMipmaps(builder.detach());
+        fImg = builder.attachTo(fImg.get());
     }
 
     DrawResult onDraw(SkCanvas* canvas, SkString*) override {
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index b5dd49f..ba711e5 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -25,6 +25,7 @@
 
 class SkData;
 class SkCanvas;
+class SkImage;
 class SkImageFilter;
 class SkImageGenerator;
 class SkMipmap;
@@ -64,10 +65,20 @@
     int countLevels() const;
     SkPixmap level(int index) const;
 
-    sk_sp<SkMipmap> detach();
+    /**
+     *  If these levels are compatible with src, return a new Image that combines src's base level
+     *  with these levels as mip levels. If not compatible, this returns nullptr.
+     */
+    sk_sp<SkImage> attachTo(const SkImage* src);
+
+    sk_sp<SkImage> attachTo(sk_sp<SkImage> src) {
+        return this->attachTo(src.get());
+    }
 
 private:
     sk_sp<SkMipmap> fMM;
+
+    friend class SkImage;
 };
 
 /** \class SkImage
@@ -1197,15 +1208,6 @@
 
     /**
      *  Returns an image with the same "base" pixels as the this image, but with mipmap levels
-     *  as well. If this image already has mipmap levels, they will be replaced with new ones.
-     *
-     *  If data == nullptr, the mipmap levels are computed automatically.
-     *  If data != nullptr, then the caller has provided the data for each level.
-     */
-    sk_sp<SkImage> withMipmaps(sk_sp<SkMipmap> data) const;
-
-    /**
-     *  Returns an image with the same "base" pixels as the this image, but with mipmap levels
      *  automatically generated and attached.
      */
     sk_sp<SkImage> withDefaultMipmaps() const;
@@ -1396,10 +1398,13 @@
 private:
     SkImage(const SkImageInfo& info, uint32_t uniqueID);
     friend class SkImage_Base;
+    friend class SkMipmapBuilder;
 
     SkImageInfo     fInfo;
     const uint32_t  fUniqueID;
 
+    sk_sp<SkImage> withMipmaps(sk_sp<SkMipmap>) const;
+
     using INHERITED = SkRefCnt;
 };
 
diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
index dbb2d13..0f328a5 100644
--- a/src/core/SkReadBuffer.cpp
+++ b/src/core/SkReadBuffer.cpp
@@ -408,7 +408,7 @@
                 if (auto ri = image->makeRasterImage()) {
                     image = ri;
                 }
-                image = image->withMipmaps(builder.detach());
+                image = builder.attachTo(image);
                 SkASSERT(image);    // withMipmaps should never return null
             }
         }
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 8674de4..8042bf5 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -662,10 +662,6 @@
     return pm;
 }
 
-sk_sp<SkMipmap> SkMipmapBuilder::detach() {
-    return std::move(fMM);
-}
-
 bool SkImage::hasMipmaps() const {
     return as_IB(this)->onPeekMips() != nullptr;
 }
@@ -682,3 +678,7 @@
 sk_sp<SkImage> SkImage::withDefaultMipmaps() const {
     return this->withMipmaps(nullptr);
 }
+
+sk_sp<SkImage> SkMipmapBuilder::attachTo(const SkImage* src) {
+    return src->withMipmaps(fMM);
+}
diff --git a/tests/MipMapTest.cpp b/tests/MipMapTest.cpp
index 8beaba3..fe6d234 100644
--- a/tests/MipMapTest.cpp
+++ b/tests/MipMapTest.cpp
@@ -235,8 +235,7 @@
     SkMipmapBuilder builder(img->imageInfo());
     fill_in_mips(&builder, img);
 
-    auto img2 = img->withMipmaps(builder.detach());
-    REPORTER_ASSERT(reporter, !builder.detach());
+    auto img2 = builder.attachTo(img);
     REPORTER_ASSERT(reporter, img.get()  != img2.get());
     REPORTER_ASSERT(reporter, img1.get() != img2.get());
     REPORTER_ASSERT(reporter, img2->hasMipmaps());
@@ -248,7 +247,7 @@
     auto check_fails = [reporter](sk_sp<SkImage> img, const SkImageInfo& info) {
         SkMipmapBuilder builder(info);
         fill_in_mips(&builder, img);
-        auto img2 = img->withMipmaps(builder.detach());
+        auto img2 = builder.attachTo(img);
         // if withMipmaps() succeeds, it returns a new image, otherwise it returns the original
         REPORTER_ASSERT(reporter, img.get() == img2.get());
     };
