Изменение размеров изображений с ASP.NET и сохранение в базе данных - PullRequest
1 голос
/ 19 марта 2010

Мне нужно взять загруженное изображение, изменить его размер и сохранить в базе данных. Достаточно просто, за исключением того, что у меня нет доступа для сохранения каких-либо временных файлов на сервер. Я беру изображение, изменяю его размер как растровое изображение, и мне нужно сохранить его в поле базы данных в качестве исходного типа изображения (например, JPG). Как я могу получить FileBytes () таким образом, чтобы я мог сохранить его в базе данных?

До того, как я использовал ImageUpload.FileBytes (), но теперь, когда я изменяю размеры, я имею дело с изображениями и растровыми изображениями, а не с FileUploads и не могу найти ничего, что дало бы мне байты.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 28 мая 2011

На самом деле все не так просто ... 28 неочевидных ловушек, на которые следует обратить внимание при изменении размера изображения . Лучше всего использовать мою бесплатную библиотеку с открытым исходным кодом для решения всех проблем кодирования и предотвращения ошибок GDI.

Вот как получить кодированный массив byte [] для каждого загруженного файла после изменения размера, обрезки и преобразования в формат Jpeg.

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 для хранения изображений. Смотрите мой подкаст со Скоттом Хансельманом для получения дополнительной информации.

1 голос
/ 19 марта 2010

См. Изменение размера изображения без потери качества Затем вы можете записать свое изображение (Bitmap.SaveToStream) в MemoryStream и вызвать ToArray, чтобы получить байты.

0 голосов
/ 19 марта 2010

Это то, что я сделал, чтобы изменить размеры изображений.

    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();            
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...