Значительная задержка загрузки изображения в поток памяти с использованием веб-сборки C# Blazor.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Значительная задержка загрузки изображения в поток памяти с использованием веб-сборки C# Blazor.

Сообщение Anonymous »

Я пишу код 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»