mirror of
https://github.com/spacebarchat/server.git
synced 2026-03-31 22:25:43 +00:00
50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using ImageMagick;
|
|
|
|
namespace Spacebar.AdminApi.TestClient.Services.Services;
|
|
|
|
public interface IFileSource {
|
|
public string BaseUrl { get; }
|
|
public Task<FileInfo> GetFile(string path, CancellationToken? cancellationToken = null);
|
|
}
|
|
|
|
public class FileInfo : IDisposable, IAsyncDisposable {
|
|
public string MimeType { get; set; }
|
|
public Stream Stream { get; set; }
|
|
|
|
protected virtual void Dispose(bool disposing) {
|
|
if (disposing) {
|
|
Stream.Dispose();
|
|
}
|
|
}
|
|
|
|
public void Dispose() {
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
protected virtual async ValueTask DisposeAsyncCore() => await Stream.DisposeAsync();
|
|
|
|
public async ValueTask DisposeAsync() {
|
|
await DisposeAsyncCore();
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
public async Task<MagickImageCollection> ToMagickImageCollectionAsync() {
|
|
var ms = new MemoryStream();
|
|
Stream.Position = 0;
|
|
await Stream.CopyToAsync(ms);
|
|
ms.Position = 0;
|
|
var img = MimeType switch {
|
|
"image/apng" => new MagickImageCollection(ms, MagickFormat.APng),
|
|
_ => new MagickImageCollection(ms)
|
|
};
|
|
|
|
// if (img.First().Format == MagickFormat.Png) {
|
|
// img.Dispose();
|
|
// ms.Position = 0;
|
|
// img = new MagickImageCollection(ms, MagickFormat.APng);
|
|
// }
|
|
|
|
return img;
|
|
}
|
|
} |