【发布时间】:2020-07-21 22:59:01
【问题描述】:
我们想要拍摄一张扫描的图像并确定它是横向还是纵向,然后根据用户将其旋转为横向或纵向的偏好,在需要时进行旋转。
即用户希望它是纵向的,但它的原始格式是横向的。
我们如何确定它是纵向还是横向,然后如果需要,将其旋转 90 度。
尝试这样的事情,但卡在未打开或重置的流上等等......但更重要的是,这是正确/最有效的方法吗?我没有看到任何自动执行此操作的说明,例如:desiredAspectRation=Portrait;,它已经在 ImageResizer.net 中执行此操作,对吗?
int? imageWidth;
int? imageHeight;
using (var updatedImageFileStream = new MemoryStream())
{
ImageJob imageJob = new ImageJob(origFileStream, updatedImageFileStream,
new Instructions(strInstructions)
);
imageJob.Build();
//change to portrait if required
imageWidth = imageJob.SourceWidth;
imageHeight = imageJob.SourceHeight;
if(imageWidth > imageHeight)
{
//updatedImageFileStream.Seek(0, SeekOrigin.Begin);
strInstructions = "rotate=90;";
imageJob = new ImageJob(updatedImageFileStream, updatedImageFileStream,
new Instructions(strInstructions)
);
imageJob.Build();
}
updatedImageFileStream.Seek(0, SeekOrigin.Begin);
//upload image to azure
await azureRepository.UploadAsync(serverRelativePath, updatedImageFileStream, contentType);
origFileStream.Dispose();
}
更新
使用下面的方法让它工作。但不确定它是否最有效。
-
您是否需要创建一个新流,或者
ImageJob可以采用相同的源和目标来覆盖它...我在尝试时收到一个错误,提示无法访问已关闭的流,所以也许您确实需要创建一个新的像我一样流式传输。 -
我不喜欢重复调用来上传图像(
await azureRepository.UploadAsync(serverRelativePath, updatedImageFileStream, contentType);),但我不知道如何将第二个图像流复制到第一个图像流上,所以我可以只保留一个对UploadAsync的调用。我不断收到无法访问关闭的流类型错误。 -
我还有什么遗漏吗?
工作代码,但高效?
int? imageWidth;
int? imageHeight;
using (var updatedImageFileStream = new MemoryStream())
{
ImageJob imageJob = new ImageJob(origFileStream, updatedImageFileStream,
new Instructions(strInstructions)
);
imageJob.Build();
//change to portrait if required - WORKS, uncomment if want to do 100% of time, or this is how to implement based on a parameter of "change to Portrait"
imageWidth = imageJob.SourceWidth;
imageHeight = imageJob.SourceHeight;
if (imageWidth > imageHeight)
{
updatedImageFileStream.Seek(0, SeekOrigin.Begin);
strInstructions = "rotate=90;";
var updatedImageFileStream2 = new MemoryStream();
imageJob = new ImageJob(updatedImageFileStream, updatedImageFileStream2,
new Instructions(strInstructions)
);
imageJob.Build();
updatedImageFileStream2.Seek(0, SeekOrigin.Begin);
//upload image to azure
await azureRepository.UploadAsync(serverRelativePath, updatedImageFileStream2, contentType);
updatedImageFileStream2.Dispose();
}
else
{
updatedImageFileStream.Seek(0, SeekOrigin.Begin);
//upload image to azure
await azureRepository.UploadAsync(serverRelativePath, updatedImageFileStream, contentType);
}
origFileStream.Dispose();
}
【问题讨论】:
标签: c# asp.net-mvc imageresizer