我正在Stream
将其转换为Image
,处理该图片,然后返回FileStream
。
这是性能问题吗?如果没有,最好的方法是转换并返回流吗?
public FileStream ResizeImage(int h, int w, Stream stream)
{
var img = Image.FromStream(stream);
/* ..Processing.. */
//converting back to stream? is this right?
img.Save(stream, ImageFormat.Png);
return stream;
}
正在运行的情况:用户在我的网站上传图像(控制器为我提供了一个Stream,我调整了这个大小,然后将此流发送到rackspace(Rackspace需要FileStream
)。
答案 0 :(得分:9)
你基本上想要这样的东西,不是吗:
public void Resize(Stream input, Stream output, int width, int height)
{
using (var image = Image.FromStream(input))
using (var bmp = new Bitmap(width, height))
using (var gr = Graphics.FromImage(bmp))
{
gr.CompositingQuality = CompositingQuality.HighSpeed;
gr.SmoothingMode = SmoothingMode.HighSpeed;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.DrawImage(image, new Rectangle(0, 0, width, height));
bmp.Save(output, ImageFormat.Png);
}
}
将使用如下:
using (var input = File.OpenRead("input.jpg"))
using (var output = File.Create("output.png"))
{
Resize(input, output, 640, 480);
}
答案 1 :(得分:0)
看起来很简单。您必须阅读整个图像内容才能处理它,然后您必须将结果写回来。
FileStreams是处理文件的常规.NET方式,因此出于正常目的,您的方法是可以的。
我唯一不理解的是你为什么再次返回FileStream - 它与参数传递的对象相同。
如果您正在执行大量图像并且仅修改部分数据,则内存映射文件可以提高性能。然而,它是一个更先进的概念。