imageresizing.net の画像リサイザーを使用していますが、奇妙な動作が見られます。
ストリームから画像を読み込んで画像のサイズを変更すると、元の画像のプロパティにアクセスできなくなります。
次のコードは問題を再現します。
static void Main(string[] args)
{
using(var httpPostedFileBaseImage = new FileStream(@"C:\test.jpg",FileMode.Open, FileAccess.Read, FileShare.Read))
{
using(var uploadedImage = Image.FromStream(httpPostedFileBaseImage))
{
Console.WriteLine(uploadedImage.Width);
var resizedImage = ImageBuilder.Current.Build(uploadedImage,
new ResizeSettings("width=110;height=83"));
Console.WriteLine(uploadedImage.Width);
}
}
}
ImageBuilder 行の前に、uploadedImage.Width を確認できますが、その後で例外がスローされます。
System.ArgumentException was unhandled
HResult=-2147024809
Message=Parameter is not valid.
Source=System.Drawing
StackTrace:
at System.Drawing.Image.get_Width()
at ConsoleApplication6.Program.Main(String[] args) in C:\Users\Daniel\Desktop\ConsoleApplication6\ConsoleApplication6\Program.cs:line 25
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
ここで間違っていることがありますか、それとも画像リサイズのバグである可能性がありますか?
注:問題はもともと、画像がアップロードされたasp.net mvcアプリからのものでした。そのため、変数はhttpPostedFileBaseImageと呼ばれ、おそらくImage.FromFileの代わりにImage.FromStreamを使用しています
画像はありますが、ほとんどの画像で発生するようです。
編集:
画像のサイズを変更した後、次のことを試してみましたが役に立ちませんでした
httpPostedFileBaseImage.Seek(0, SeekOrigin.Begin);
EDIT2:
これが私を混乱させたものです
ドキュメントは、「disposeSource=true でない限り破棄されない、またはこれを読み違えているのではないか?」と示唆しているようです。