使用ASP.NET调整图像大小并保存到数据库

时间:2010-03-18 21:14:53

标签: asp.net image image-processing bitmap

我需要上传图片,调整大小并将其保存到数据库中。很简单,除了我没有权限将任何临时文件保存到服务器。我正在拍摄图像,将其调整为Bitmap,并需要将其保存为数据库字段作为原始图像类型(例如JPG)。如何获取这样的FileBytes(),以便将其保存到数据库中?

在我使用ImageUpload.FileBytes()之前,但现在我正在调整大小,我正在处理图像和位图而不是FileUploads,似乎找不到任何可以给我字节的东西。

谢谢!

3 个答案:

答案 0 :(得分:3)

实际上并非如此简单......有28 non-obvious pitfalls you should watch out for when doing image resizing。最好使用我的free, open-source library to handle all the encoding issues and avoid the GDI bugs.

以下是在调整大小,裁剪和转换为Jpeg格式之后如何为每个上传的文件获取编码的byte []数组。

using ImageResizer;
using ImageResizer.Encoding;


//Loop through each uploaded file
foreach (string fileKey in HttpContext.Current.Request.Files.Keys) {
    HttpPostedFile file = HttpContext.Current.Request.Files[fileKey];

    //You can specify any of 30 commands.. See http://imageresizing.net
    ResizeSettings resizeCropSettings = 
        new ResizeSettings("width=200&height=200&format=jpg&crop=auto");

    using (MemoryStream ms = new MemoryStream()) {
        //Resize the image
        ImageBuilder.Current.Build(file, ms, resizeCropSettings);

        //Upload the byte array to SQL: ms.ToArray();
    }
}

使用MS SQL存储图像也是一个坏主意。有关详细信息,请参阅我的podcast with Scott Hanselman

答案 1 :(得分:1)

参见Resizing an Image without losing any quality然后,您可以将您的图像(Bitmap.SaveToStream)写入MemoryStream并调用ToArray来获取字节。

答案 2 :(得分:0)

这就是我为调整图像大小所做的工作。

    private byte[] toBytes(Image image)
    {            
        Bitmap resized = new Bitmap(image, yourWidth, yourHeight);            
        System.IO.MemoryStream ms = new System.IO.MemoryStream();            
        resized.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        resized.Dispose();
        return ms.ToArray();            
    }