Browse Source

Don't use ToArray() when we don't need to.

pull/1153/head
James Jackson-South 6 years ago
parent
commit
bcf50cafba
  1. 28
      Directory.Build.props
  2. 22
      src/ImageSharp/ImageExtensions.cs

28
Directory.Build.props

@ -31,27 +31,27 @@
<!-- <!--
https://apisof.net/ https://apisof.net/
+===================+=======+==========+=====================+=============+=================+====================+==============+ +===================+=======+==========+=====================+=============+=================+====================+==============+============+
| SUPPORTS | MATHF | HASHCODE | EXTENDED_INTRINSICS | SPAN_STREAM | ENCODING_STRING | RUNTIME_INTRINSICS | CODECOVERAGE | | SUPPORTS | MATHF | HASHCODE | EXTENDED_INTRINSICS | SPAN_STREAM | ENCODING_STRING | RUNTIME_INTRINSICS | CODECOVERAGE | BASE64SPAN |
+===================+=======+==========+=====================+=============+=================+====================+==============+ +===================+=======+==========+=====================+=============+=================+====================+==============+============+
| netcoreapp3.1 | Y | Y | Y | Y | Y | Y | Y | | netcoreapp3.1 | Y | Y | Y | Y | Y | Y | Y | Y |
| netcoreapp2.1 | Y | Y | Y | Y | Y | N | Y | | netcoreapp2.1 | Y | Y | Y | Y | Y | N | Y | Y |
| netcoreapp2.0 | Y | N | N | N | N | N | Y | | netcoreapp2.0 | Y | N | N | N | N | N | Y | Y |
| netstandard2.1 | Y | Y | N | Y | Y | N | Y | | netstandard2.1 | Y | Y | N | Y | Y | N | Y | N |
| netstandard2.0 | N | N | N | N | N | N | Y | | netstandard2.0 | N | N | N | N | N | N | Y | N |
| netstandard1.3 | N | N | N | N | N | N | N | | netstandard1.3 | N | N | N | N | N | N | N | N |
| net472 | N | N | Y | N | N | N | Y | | net472 | N | N | Y | N | N | N | Y | N |
+===================+=======+==========+=====================+=============+=================+====================+==============+ +===================+=======+==========+=====================+=============+=================+====================+==============+============+
--> -->
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'"> <PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE</DefineConstants> <DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'"> <PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'">
<DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE</DefineConstants> <DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0'"> <PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0'">
<DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_CODECOVERAGE</DefineConstants> <DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_CODECOVERAGE;SUPPORTS_BASE64SPAN</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.1'"> <PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
<DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE</DefineConstants> <DefineConstants>$(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE</DefineConstants>

22
src/ImageSharp/ImageExtensions.cs

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Buffers;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
@ -115,8 +116,25 @@ namespace SixLabors.ImageSharp
using (var stream = new MemoryStream()) using (var stream = new MemoryStream())
{ {
source.Save(stream, format); source.Save(stream, format);
stream.Flush();
return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(stream.ToArray())}"; // Always available.
stream.TryGetBuffer(out ArraySegment<byte> buffer);
#if !SUPPORTS_BASE64SPAN
byte[] sharedBuffer = ArrayPool<byte>.Shared.Rent(buffer.Count);
try
{
buffer.AsSpan().CopyTo(sharedBuffer);
return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(sharedBuffer)}";
}
finally
{
ArrayPool<byte>.Shared.Return(sharedBuffer);
}
#else
return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(buffer)}";
#endif
} }
} }
} }

Loading…
Cancel
Save