diff --git a/Directory.Build.props b/Directory.Build.props
index 604153f976..def231a7ae 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -31,27 +31,27 @@
- $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE
+ $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN
- $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE
+ $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN
- $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_CODECOVERAGE
+ $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN
$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE
diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs
index 6cdc948d40..7f753c05a6 100644
--- a/src/ImageSharp/ImageExtensions.cs
+++ b/src/ImageSharp/ImageExtensions.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0.
using System;
+using System.Buffers;
using System.Collections.Generic;
using System.IO;
using System.Text;
@@ -115,8 +116,25 @@ namespace SixLabors.ImageSharp
using (var stream = new MemoryStream())
{
source.Save(stream, format);
- stream.Flush();
- return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(stream.ToArray())}";
+
+ // Always available.
+ stream.TryGetBuffer(out ArraySegment buffer);
+
+#if !SUPPORTS_BASE64SPAN
+
+ byte[] sharedBuffer = ArrayPool.Shared.Rent(buffer.Count);
+ try
+ {
+ buffer.AsSpan().CopyTo(sharedBuffer);
+ return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(sharedBuffer)}";
+ }
+ finally
+ {
+ ArrayPool.Shared.Return(sharedBuffer);
+ }
+#else
+ return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(buffer)}";
+#endif
}
}
}