Как прочитать файл SVG из потока с помощью MagickNet
Мое приложение позволяет пользователю загружать изображения и отправлять их в службу, которая затем преобразует их в другой формат и отправляет обратно. Мы добавляем поддержку формата файлов SVG, и у меня возникает проблема с чтением файла из байтового массива.
Проблема в том, что когда я инициализирую объект MagickImageInfo с объектом SVG Stream, я получаю эту ошибку:
"делегат без декодирования для этого формата изображения" @ error/blob.c/BlobToImage/355"
Я поэкспериментировал с этим и смог обойти эту ошибку, если вместо этого создал объект MagickImage и снабдил его экземпляром MagickReadSettings, в котором я явно установил формат SVG.
Основная проблема заключается в том, что коду MagickImage требуется подсказка о том, что это за файл, когда он является SVG. Для других типов файлов, кажется, можно определить, что это за файл. Однако, хотя я могу предоставить классу MagickImage формат файла, класс MagickImageInfo не имеет никаких параметров, которые я мог бы дать ему для подсказки о типе файла.
Одним из возможных решений было бы записать файл на диск, а затем сделать так, чтобы класс MagickImageInfo считывал файл с диска, но я действительно не хочу этого делать, поскольку это усложняет службу и делает ее зависимой от доступа к записи на диск.
Соответствующий код:
Рабочий код:
var readSettings = new MagickReadSettings() { Format = MagickFormat.Svg };
using (MagickImage image = new MagickImage(stream, readSettings))
{
image.Write("C:\test"); // Actual code doesn't write to disk
}
Не работает код:
MagickImageInfo info = new MagickImageInfo(stream);
1 ответ
Похоже, вы нашли недостающую функцию. Я нашел ваш пост здесь и добавил дополнительную перегрузку для MagickImageInfo
конструктор. Следующее будет доступно в Magick.NET 7.0.3.9 и выше:
var readSettings = new MagickReadSettings() { Format = MagickFormat.Svg };
MagickImageInfo info = new MagickImageInfo(stream, readSettings);
Не стесняйтесь открывать вопрос в следующий раз здесь: https://github.com/dlemstra/Magick.NET или здесь: https://magick.codeplex.com/discussions