私のアプリケーションでは、ユーザーが画像をアップロードしてサービスに送信できます。サービスは画像を別の形式に変換して送り返します。SVG ファイル形式のサポートを追加していますが、バイト配列からファイルを読み取る際に問題が発生しています。
問題は、SVG Stream オブジェクトを使用して MagickImageInfo オブジェクトを初期化すると、次のエラーが発生することです。
「この画像形式のデコード デリゲートはありません '' @ error/blob.c/BlobToImage/355」
私はそれをいじって、代わりに MagickImage オブジェクトを作成し、それを MagickReadSettings のインスタンスに指定して Format を明示的に SVG に設定すると、このエラーを回避できます。
核となる問題は、MagickImage コードが SVG である場合、それがどのようなファイルであるかについてのヒントを必要とすることです。それ以外のファイルタイプについては、どのようなファイルかを推測できるようです。ただし、ファイルの形式を MagickImage クラスに指定することはできますが、MagickImageInfo クラスには、ファイルの種類を示すために指定できるパラメーターがありません。
考えられる解決策の 1 つは、ファイルをディスクに書き込み、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);