Как создать миниатюру в .NET

Попытка создать миниатюры из байтового массива, содержащего изображения с расширением jpg или png, а затем показать их на странице бритвы. Вот что у меня есть на данный момент. Массив байтов поступает из класса объектов, который содержит поле FileContent.

Буду очень признателен за любую помощь в том, что я делаю неправильно, и в следующих шагах.

Мой текущий подход заключался в том, чтобы взять массив байтов изображения, изменить его размер как миниатюру изображения, а затем сохранить его как другой массив, наконец, используя преобразование массива байтов, чтобы попытаться загрузить изображение во внешний интерфейс, что не сработало.

Страница Бритвы


<QuickGrid Items = "@BlobNames">

        <TemplateColumn Title = "Thumbnail">
        @{
            var currItem = (context as DocumentObject);
            byte[] thumbnail = GenerateThumbnail(currItem.FileContent);
            var thumbnailUrl = $"data:image/jpeg;base64,{Convert.ToBase64String(thumbnail)}"; 

        }
</QuickGrid>


Бэкэнд

protected byte[] GenerateThumbnail(byte[] imageStream)
{
    using (MemoryStream ms = new MemoryStream(imageStream))
    {
        using (Image originalImage = Image.FromStream(ms))
        {
            using(Image thumbnail = originalImage.GetThumbnailImage(64,64,()=>false, IntPtr.Zero))
            {
                using(MemoryStream thumbnailStream = new MemoryStream())
                {
                    thumbnail.Save(thumbnailStream, originalImage.RawFormat);
                    return thumbnailStream.ToArray();
                }
            }
        }
    }
}

Когда я запускаю программу, я получаю следующую ошибку: Компонент отрисовки необработанных исключений: инициализатор типа для System.Drawing.DrawingCom вызвал исключение. System.TypeInitializationException: инициализатор типа для System.Drawing.DrawingCom вызвал исключение.

Читали ли вы примечания на этой странице: Learn.microsoft.com/en-us/dotnet/api/…

Flydog57 29.04.2024 05:25

возможно, вам захочется переосмыслить свой подход к этому. Обычно миниатюры создаются как отдельные файлы изображений, которые имеют гораздо более низкое разрешение и качество. Обычно вы сохраняете эти миниатюры на диск и извлекаете их позже, когда это необходимо. пересчет миниатюр во время выполнения убивает весь смысл миниатюр, а именно повышение производительности. при нынешнем подходе вы все равно сэкономите на сетевом трафике, но за счет вычислительных затрат.

Emre Bener 30.04.2024 12:36

Да, вы правы, вместо этого я решил один раз создать миниатюру и сохранить ее в базе данных, чтобы получить ее позже.

Coder_101 30.04.2024 20:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось найти решение, используя Image Sharp для создания миниатюр.

С библиотекой ImageSharp я смог использовать метод Image.Load(MemoryStream ms), который не генерировал ту же ошибку, что и раньше.

Другие вопросы по теме