Конвертировать данные изображения SQL Server (MAX) в допустимый файл изображения в .NET CORE (Black/Grey Output)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Конвертировать данные изображения SQL Server (MAX) в допустимый файл изображения в .NET CORE (Black/Grey Output)

Сообщение Anonymous »

Я работаю над приложением Core 5.0 Core 5.0, где я пытаюсь извлечь данные изображения из SQL Server, хранящийся в столбце Varbinary (max) , и преобразовать их в правильный файл изображения (например, .jpg , .png ) и хранить его в файлах в платке в проекте root (не Bin \ Degug \ DeLug \ DeLug. /> Проблема в том, что независимо от библиотеки я использую (

Код: Выделить всё

System.Drawing
, sixlabors.imagesharp , skiasharp, imagemagick), выходное изображение либо чернокожие, серого, или зеленое, и не выглядит как оригинал. /> Вот что я попробовал с разными библиотеками: < /p>

Код: Выделить всё

System.Drawing.Common
:

Код: Выделить всё

using System.Drawing;
using System.Drawing.Imaging;

byte[] imageBytes = record.Image;
using (var ms = new MemoryStream(imageBytes))
using (var image = Image.FromStream(ms))
{
image.Save("Files/image_sysdraw.jpg", ImageFormat.Jpeg);
}
< /code>
Результат: изображение хранится, но выглядит совершенно черно -серым. < /p>
SixLabors.ImageSharp
:

Код: Выделить всё

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Formats.Jpeg;

byte[] imageBytes = record.Image;
using (var ms = new MemoryStream(imageBytes))
using (var image = Image.Load(ms))
{
image.SaveAsJpeg("Files/image_imagesharp.jpg");
}
< /code>
Результат: тот же результат - в основном серым или поврежденным изображением. < /p>
skiasharp: < /p>
using SkiaSharp;

byte[] imageBytes = record.Image;
using (var ms = new MemoryStream(imageBytes))
using (var skStream = new SKManagedStream(ms))
using (var skBitmap = SKBitmap.Decode(skStream))
{
using var image = SKImage.FromBitmap(skBitmap);
using var data = image.Encode(SKEncodedImageFormat.Jpeg, 100);
using var fs = File.OpenWrite("Files/image_skiasharp.jpg");
data.SaveTo(fs);
}
< /code>
Результат: либо полностью зеленый, либо пусто.using ImageMagick;

byte[] imageBytes = record.Image;

using (var image = new MagickImage(imageBytes))
{
image.Format = MagickFormat.Jpeg;
image.Write("Files/image_magick.jpg");
}
< /code>
Дополнительная информация: < /p>
[list]
[*]  sql server type type: varbinary (max) < /code> < /p>
< /li>
 />0xffd8ffe000104a4649460001010000010001...
< /li>
  Это начинается с FFD8, что указывает на то, что это действительный заголовок JPEG. Появляется правильно! < /p>
< /li>
  Это означает, что сами данные не повреждены, но преобразование через C# проблематично. < /p>
< /li>
< /ul>
[b], что я хочу < /strong> < /p>

 varbinary (max) 
в фактический файл изображения.
[*] Бонус: Сохраните его в Projectroot \ files \ image.jpg (не под bin \ debug \ net5.0 ).
[/list]
[/b]



). Приложение консоли
[*] Данные, хранящиеся в SQL Server 2019


Подробнее здесь: https://stackoverflow.com/questions/797 ... net-core-b
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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