Попытка создать миниатюры из байтового массива, содержащего изображения с расширением 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 вызвал исключение.
возможно, вам захочется переосмыслить свой подход к этому. Обычно миниатюры создаются как отдельные файлы изображений, которые имеют гораздо более низкое разрешение и качество. Обычно вы сохраняете эти миниатюры на диск и извлекаете их позже, когда это необходимо. пересчет миниатюр во время выполнения убивает весь смысл миниатюр, а именно повышение производительности. при нынешнем подходе вы все равно сэкономите на сетевом трафике, но за счет вычислительных затрат.
Да, вы правы, вместо этого я решил один раз создать миниатюру и сохранить ее в базе данных, чтобы получить ее позже.
Мне удалось найти решение, используя Image Sharp для создания миниатюр.
С библиотекой ImageSharp я смог использовать метод Image.Load(MemoryStream ms), который не генерировал ту же ошибку, что и раньше.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Читали ли вы примечания на этой странице: Learn.microsoft.com/en-us/dotnet/api/…