2009-09-25 2 views
1

Я хочу изменить размер изображения до его сохранения в моей базе данных mysql .. как я его обработаю? У меня есть код для просмотра, контроллер и модель.Как изменить размер изображения при загрузке в базу данных в asp.net mvc?

Вид:

<form method="post" enctype="multipart/form-data" action="<%=url.action("PhotoInsert") %>"> 
    <%Using Html.BeginForm()%> 
    <p> 
    <label for="despcription">Caption :</label> 
    <%=Html.TextArea("caption")%> 
    </p> 
    <p> 
    <label for="image">Image : </label> 
    <input type="file" id="image" name="image" /> 
    </p> 
    <input type="submit" value="Insert" /> 
    <%End Using%> 
</form> 

Контроллер:

Function PhotoInsert(ByVal caption As String, ByVal image As HttpPostedFileBase) As ActionResult 
    UploadDirectory = Path.GetDirectoryName(Request.PhysicalApplicationPath) 
    Dim fileName As String = Path.GetFileName(image.FileName) 
    Dim fullUploadpath As String = Path.Combine(UploadDirectory, fileName) 
    image.SaveAs(fullUploadpath) 
    dPhotos.pictureInsert(image:=image.FileName, caption:=caption) 
End Function 

Модель:

Imports Microsoft.VisualBasic 
Imports System.Data 

Public Class ClassPhotosConnection 
Inherits ClassConnection 
    Public Sub pictureInsert(ByVal image As String, ByVal caption As String) 
    Dim insert As String = String.Format("INSERT INTO pictures(Image, Caption) VALUES ('{0}','{1}')", image, caption) 
    UpdateData(insert) 
    End Sub 
End Class 

Спасибо :)

ответ

0

Tiff, я быстро написал это во время обеденного перерыва с разных сайтов. Это никоим образом не нормализуется, и есть вещи, которые вы можете сделать лучше, но учитывая все обходные пути, которые у вас были на этом, я думал, что дать вам то, что работает, будет достаточно хорошим.

Так вот оно. Я запустил и протестировал его, и он не работает без проблем.

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Drawing.Drawing2D; 
using System.Drawing.Imaging; 

namespace ImageResize 
{ 
    class Program 
    { 
     private static byte[] ImageData; 
     private static byte[] SmallImageData; 
     private static Bitmap bmp; 

     static void Main(string[] args) 
     { 
      LoadImageIntoByteArray(); 
      LoadByteArrayAsBitmap(); 
      SaveFromStream(); 
     } 

     private static void SaveFromStream() 
     { 
      using (Image img = Image.FromStream(new MemoryStream(SmallImageData))) 
      { 
       img.Save(@"flowers_thumb.jpg", ImageFormat.Jpeg); 
      } 
     } 

     private static void LoadByteArrayAsBitmap() 
     { 
      MemoryStream ms = new MemoryStream(ImageData); 
      bmp = new Bitmap(ms); 
      System.Drawing.Image oImg = System.Drawing.Image.FromStream(ms); 
      System.Drawing.Image oThumbNail = new Bitmap(100, 100); 
      Graphics oGraphic = Graphics.FromImage(oThumbNail); 
      oGraphic.CompositingQuality = CompositingQuality.HighQuality; 
      oGraphic.SmoothingMode = SmoothingMode.HighQuality; 
      oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      Rectangle oRectangle = new Rectangle 
       (0, 0, 100, 100); 
      oGraphic.DrawImage(oImg, oRectangle); 


      MemoryStream ms2 = new MemoryStream(); 
      oThumbNail.Save(ms2, ImageFormat.Jpeg); 
      ms2.Position = 0; 
      SmallImageData = new byte[ms2.Length]; 
      ms2.Read(SmallImageData, 0, Convert.ToInt32(ms2.Length)); 
      oGraphic.Dispose(); 
      oImg.Dispose(); 
      ms2.Close(); 
      ms2.Dispose(); 
     } 

     private static void LoadImageIntoByteArray() 
     { 
      FileStream fs = File.OpenRead(@"flowers.jpg"); 
      ImageData = new byte[fs.Length]; 
      fs.Read(ImageData, 0, ImageData.Length); 
      fs.Close(); 
     } 
    } 
} 
+0

привет Griegs..это сообщение кажется сложным для меня, чтобы понять, но лучше! =) Я ценю ваши усилия в ответе ..Я постараюсь решить проблему с вашим последним сообщением ... снова! – tiff

+0

Если вам нужна дополнительная помощь, просто добавьте еще один комментарий к этому, и я постараюсь помочь больше. Удачи – griegs

+0

griegs- Как загрузить изображение с помощью кнопки загрузки? – lock

1

Вам нужно загрузить изображение, а затем используйте что-то вроде;

public Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight) 
{ 
    Bitmap result = new Bitmap(nWidth, nHeight); 
    using(Graphics g = Graphics.FromImage((Image) result)) 
    g.DrawImage(b, 0, 0, nWidth, nHeight); 
    return result; 
} 

Непроверенный, но я использовал что-то подобное в предыдущем проекте.

Ссылка сайта = Geek Noise

EDIT

Saving Images to DB

+0

как я будет конвертировать system.web.httppostedfilebase в System.Drawing.Bitmap? =) – tiff

+0

уверены в том, что, но я думаю, что единственный способ, чтобы изменить размер, чтобы загрузить изображение первый. из вашего кода выглядит так, как будто вы сохраняете местоположение в изображении в базе данных, а не в байтовом массиве. поэтому сначала нужно загрузить изображение в виде массива байтов, а затем изменить размер, а затем вернуться в файловую систему. Вы считаете сохранение файла в поле изображения в базе данных? таким образом вы можете сохранить оригинальную, небольшую и миниатюрную версии файла в удобной таблице. его легко в mvc, чтобы получить изображение назад и отобразить на вид – griegs

+0

ваше право о моей сохранении непосредственно в базу данных .. я просто новый для mvc, поэтому почему-то не знаком с байтовым массивом. =) – tiff

0

Я удалил этот ответ в пользу большего, полная, версия.