Я пишу код C# веб-сборки Blazor в VS Code, чтобы загрузить изображение, обработать его и отобразить в браузере.
Поскольку это веб-сборка, все должно работать в браузер.
У меня процессор AMD7, 64 ГБ оперативной памяти, так что это не должно стать узким местом.
Пример изображения, которое я загружаю это: изображение размером 1,3 МБ, 2048x2048px, 72ppi - и мой код показан ниже.
Все строки выполняются в течение 400 мс, пока не будет загружен поток памяти в изображение.
Для Как указано в файле изображения, выполнение этой одной строки занимает около 2 минут и 35 секунд.
Затем с помощью функции изменения размера библиотеки изображений Sharp для изменения размера требуется еще минута и 53 секунды. image.
Может ли кто-нибудь увидеть причину, почему?
using var image = Image.Load(memoryStream);
...и...
image.Mutate(x => x.Resize(image.Width / 5, image.Height / 5));
...так долго?
Спасибо, Марк
Полный код:
@page "/Ir"
@using SixLabors.ImageSharp;
@using SixLabors.ImageSharp.PixelFormats;
@using SixLabors.ImageSharp.Processing;
@using SixLabors.ImageSharp.Processing.Processors;
@using SixLabors.ImageSharp.Formats;
@using SixLabors.ImageSharp.Formats.Png;
@using SixLabors.ImageSharp.Processing.Processors.Dithering;
@using SixLabors.ImageSharp.Processing.Processors.Transforms;
@using System;
@using System.IO;
@using System.Threading.Tasks;
@inject IJSRuntime JS
@code {
private string uploadedFileName { get; set; }
private async Task HandleFileUpload2(ChangeEventArgs e)
{
Console.WriteLine("In HandleFileUpload2");
var files = await JS.InvokeAsync("getUploadedFiles", "imageUpload");
if (files.Length > 0)
{
uploadedFileName = Path.GetFileNameWithoutExtension(files[0]);
string base64Image = files[0];
// Convert base64 string to byte array
byte[] imageData = ConvertBase64ToByteArray(base64Image);
using var memoryStream = new MemoryStream(imageData);
// Delay begins on next line
using var image = Image.Load(memoryStream);
// Next significant delay begins on this line
image.Mutate(x => x.Resize(image.Width / 5, image.Height / 5));
string processedBase64Image = ConvertImageToBase64(image);
await JS.InvokeVoidAsync("renderImageToCanvasUpload", "mainCanvas", "previewCanvas", "storeCanvas", processedBase64Image);
}
}
private byte[] ConvertBase64ToByteArray(string base64Image)
{
int commaIndex = base64Image.IndexOf(',');
if (commaIndex != -1)
{
base64Image = base64Image.Substring(commaIndex + 1);
}
return Convert.FromBase64String(base64Image);
}
private string ConvertImageToBase64(Image image)
{
using var outputStream = new MemoryStream();
image.SaveAsPng(outputStream); // Assuming PNG format
outputStream.Position = 0; // Reset stream position after saving to it
var bytes = outputStream.ToArray(); // Get byte array from stream
return $"data:image/png;base64,{Convert.ToBase64String(bytes)}"; // Properly format it for HTML
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... zor-web-as
Значительная задержка загрузки изображения в поток памяти с использованием веб-сборки C# Blazor. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение