Browse Source

Merge pull request #23497 from abpframework/Volo.Abp.Imaging.Reverse

Reverse the contributors so that the services added later are executed first.
pull/23504/head
maliming 1 year ago
committed by GitHub
parent
commit
381ca38ee0
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 30
      framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs
  2. 54
      framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs

30
framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs

@ -12,9 +12,9 @@ namespace Volo.Abp.Imaging;
public class ImageCompressor : IImageCompressor, ITransientDependency
{
protected IEnumerable<IImageCompressorContributor> ImageCompressorContributors { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
public ImageCompressor(IEnumerable<IImageCompressorContributor> imageCompressorContributors, ICancellationTokenProvider cancellationTokenProvider)
{
ImageCompressorContributors = imageCompressorContributors.Reverse();
@ -27,12 +27,12 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
CancellationToken cancellationToken = default)
{
Check.NotNull(stream, nameof(stream));
if(!stream.CanRead)
{
return new ImageCompressResult<Stream>(stream, ImageProcessState.Unsupported);
}
if(!stream.CanSeek)
{
var memoryStream = new MemoryStream();
@ -41,12 +41,12 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
stream = memoryStream;
}
foreach (var imageCompressorContributor in ImageCompressorContributors)
foreach (var imageCompressorContributor in ImageCompressorContributors.Reverse())
{
var result = await imageCompressorContributor.TryCompressAsync(stream, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(stream);
if (result.State == ImageProcessState.Unsupported)
{
continue;
@ -54,7 +54,7 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
return result;
}
return new ImageCompressResult<Stream>(stream, ImageProcessState.Unsupported);
}
@ -64,22 +64,22 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
CancellationToken cancellationToken = default)
{
Check.NotNull(bytes, nameof(bytes));
foreach (var imageCompressorContributor in ImageCompressorContributors)
foreach (var imageCompressorContributor in ImageCompressorContributors.Reverse())
{
var result = await imageCompressorContributor.TryCompressAsync(bytes, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
if (result.State == ImageProcessState.Unsupported)
{
continue;
}
return result;
}
return new ImageCompressResult<byte[]>(bytes, ImageProcessState.Unsupported);
}
protected virtual void SeekToBegin(Stream stream)
{
if (stream.CanSeek)
@ -87,4 +87,4 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
stream.Seek(0, SeekOrigin.Begin);
}
}
}
}

54
framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs

@ -13,36 +13,36 @@ namespace Volo.Abp.Imaging;
public class ImageResizer : IImageResizer, ITransientDependency
{
protected IEnumerable<IImageResizerContributor> ImageResizerContributors { get; }
protected ImageResizeOptions ImageResizeOptions { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
public ImageResizer(
IEnumerable<IImageResizerContributor> imageResizerContributors,
IOptions<ImageResizeOptions> imageResizeOptions,
IEnumerable<IImageResizerContributor> imageResizerContributors,
IOptions<ImageResizeOptions> imageResizeOptions,
ICancellationTokenProvider cancellationTokenProvider)
{
ImageResizerContributors = imageResizerContributors.Reverse();
CancellationTokenProvider = cancellationTokenProvider;
ImageResizeOptions = imageResizeOptions.Value;
}
public virtual async Task<ImageResizeResult<Stream>> ResizeAsync(
[NotNull] Stream stream,
ImageResizeArgs resizeArgs,
string? mimeType = null,
[NotNull] Stream stream,
ImageResizeArgs resizeArgs,
string? mimeType = null,
CancellationToken cancellationToken = default)
{
Check.NotNull(stream, nameof(stream));
ChangeDefaultResizeMode(resizeArgs);
if(!stream.CanRead)
{
return new ImageResizeResult<Stream>(stream, ImageProcessState.Unsupported);
}
if(!stream.CanSeek)
{
var memoryStream = new MemoryStream();
@ -50,13 +50,13 @@ public class ImageResizer : IImageResizer, ITransientDependency
SeekToBegin(memoryStream);
stream = memoryStream;
}
foreach (var imageResizerContributor in ImageResizerContributors)
foreach (var imageResizerContributor in ImageResizerContributors.Reverse())
{
var result = await imageResizerContributor.TryResizeAsync(stream, resizeArgs, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(stream);
if (result.State == ImageProcessState.Unsupported)
{
continue;
@ -64,24 +64,24 @@ public class ImageResizer : IImageResizer, ITransientDependency
return result;
}
return new ImageResizeResult<Stream>(stream, ImageProcessState.Unsupported);
}
public virtual async Task<ImageResizeResult<byte[]>> ResizeAsync(
[NotNull] byte[] bytes,
ImageResizeArgs resizeArgs,
string? mimeType = null,
[NotNull] byte[] bytes,
ImageResizeArgs resizeArgs,
string? mimeType = null,
CancellationToken cancellationToken = default)
{
Check.NotNull(bytes, nameof(bytes));
ChangeDefaultResizeMode(resizeArgs);
foreach (var imageResizerContributor in ImageResizerContributors)
foreach (var imageResizerContributor in ImageResizerContributors.Reverse())
{
var result = await imageResizerContributor.TryResizeAsync(bytes, resizeArgs, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
if (result.State == ImageProcessState.Unsupported)
{
continue;
@ -89,10 +89,10 @@ public class ImageResizer : IImageResizer, ITransientDependency
return result;
}
return new ImageResizeResult<byte[]>(bytes, ImageProcessState.Unsupported);
}
protected virtual void ChangeDefaultResizeMode(ImageResizeArgs resizeArgs)
{
if (resizeArgs.Mode == ImageResizeMode.Default)
@ -100,7 +100,7 @@ public class ImageResizer : IImageResizer, ITransientDependency
resizeArgs.Mode = ImageResizeOptions.DefaultResizeMode;
}
}
protected virtual void SeekToBegin(Stream stream)
{
if (stream.CanSeek)
@ -108,4 +108,4 @@ public class ImageResizer : IImageResizer, ITransientDependency
stream.Seek(0, SeekOrigin.Begin);
}
}
}
}

Loading…
Cancel
Save