2009-10-16 4 views
0

Voici les nouveaux liens qui décrivent la connexion à MySQL:Comment afficher des images avec des dimensions fixes dans ASP.NET après les récupérer à partir d'une base de données MySQL

http://www.codeproject.com/KB/aspnet/asp_net_and_mysql.aspx

http://www.codeproject.com/KB/aspnet/image_asp.aspx

Voici le code Afficher l'image de la base de données MySQL:

protected void Page_Load(object sender, EventArgs e) 
{  
    MySqlConnection conn = new MySqlConnection(db); 

    conn.Open(); 
    string s; 
    s = Session["t"].ToString(); 

    string commantext = "select img_id,img_file,img_type,img_name from image where img_name='"+s+"'"; 

    // string commantext = "select img_id,img_file,img_type,img_name from image"; 
    // DataSet ds = MySqlHelper.ExecuteDataset(conn, commantext); 

    MySqlCommand cmd = new MySqlCommand(commantext,conn); 
    cmd.Parameters.Add("?img_id", MySqlDbType.Int32).Value = s; 

    // DataTable dt = ds.Tables[0]; 
    DataTable dt = GetData(cmd); 

    while(dt !=null) 
    { 
     Byte[] bytes = (Byte[])dt.Rows[0]["img_file"]; 
     // Byte[] bytes = (Byte[])dt.Rows[1][] ;      
     Response.Buffer = true; 
     Response.Charset = ""; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.ContentType = dt.Rows[0]["img_type"].ToString(); 
     Response.AddHeader("content-disposition", "attachment;filename=" 
      + dt.Rows[0]["img_name"].ToString()); 

     Response.BinaryWrite(bytes); 
     Response.Flush(); 
     Response.End(); 
    }   
    conn.Close();    
} 


private DataTable GetData(MySqlCommand cmd) 
{ 
    DataTable dt = new DataTable(); 
    //String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 

    MySqlConnection con = new MySqlConnection(db); 
    MySqlDataAdapter sda = new MySqlDataAdapter(); 

    cmd.CommandType = CommandType.Text; 
    cmd.Connection = con; 

    try 
    { 
     con.Open(); 
     sda.SelectCommand = cmd; 
     sda.Fill(dt); 
     return dt; 
    } 
    catch 
    { return null; 
    } 
    finally 
    { con.Close(); 
     sda.Dispose(); 
     con.Dispose(); 
    } 
} 

Mon code pour télécharger le fichier image à la base de données MySQL est comme ci-dessous .

protected void Button1_Click (expéditeur d'objet, EventArgs e) { Flux img_strm = File1.PostedFile.InputStream;

int img_len = File1.PostedFile.ContentLength; 

    string strtype = File1.PostedFile.ContentType; 

    //code snippet to determine image height and width. 
    System.Drawing.Image i = System.Drawing.Image.FromStream(img_strm); 
    int fileheight = int.Parse(i.Width.ToString()); 
    int filewidth = int.Parse(i.Height.ToString()); 



    strname = Text1.Value; 

    //Session["t"] = strname; 

    byte[] imgData = new byte[img_len]; 
    int n = img_strm.Read(imgData, 0, img_len); 
    int result = saveToDb(strname, imgData, strtype); 
} 


private int saveToDb(string imgName, byte[] imgbin, string imgContenttype) 
{ 



    string db = "server=localhost;database=test;uid=root;password=techsoft"; 
    MySqlConnection conn = new MySqlConnection(db); 
    MySqlCommand cmd = new MySqlCommand("insert into image(img_name,img_file,img_type) values(?img_name,?img_file,?img_type)", conn); 

    //MySqlParameter param0 = new MySqlParameter("?img_id", MySqlDbType.Int16, 20); 
    //param0.Value = ; 
    //cmd.Parameters.Add(param0); 

    MySqlParameter param0 = new MySqlParameter("?img_name", MySqlDbType.VarChar, 45); 
    param0.Value = imgName; 
    cmd.Parameters.Add(param0); 

    // MySqlParameter param1 = new MySqlParameter("?img_file", MySqlDbType.VarChar, 45); 
    MySqlParameter param1 = new MySqlParameter("?img_file", MySqlDbType.LongBlob, 10); 
    param1.Value = imgbin; 
    cmd.Parameters.Add(param1); 

    MySqlParameter param2 = new MySqlParameter("?img_type", MySqlDbType.VarChar, 45); 
    param2.Value = imgContenttype; 
    cmd.Parameters.Add(param2); 

    conn.Open(); 

    int num = cmd.ExecuteNonQuery(); 

    conn.Close(); 
    return num; 
} 

J'ai utilisé l'écriture binaire pour afficher. Quelqu'un peut-il suggérer comment afficher des images dans des dimensions fixes?

+0

Pas wiki poste communautaire. S'il vous plaît modifier votre quesiton –

Répondre

0

Merci pour tout le support de rip et The_AlienCoder pour leurs réponses. J'ai trouvé la réponse à ma propre requête.

Nous devons utiliser des flux pour convertir les données binaires de la base de données mysql. Une bibliothèque graphique ultérieure devrait être utilisée pour charger les flux. En attendant, nous devons redimensionner l'image en fonction de nos besoins.


  protected void Page_Load(object sender, EventArgs e){  

      //Create connection to mysql database. 
      MySqlConnection conn = new MySqlConnection(db); 
      conn.Open(); 
      string s; 
      s = Session["t"].ToString(); 

      string commantext = "select img_id,img_file,img_type,img_name from image where img_name='"+s+"'"; 

      MySqlCommand cmd = new MySqlCommand(commantext,conn); 
      cmd.Parameters.Add("?img_id", MySqlDbType.Int32).Value = s; 

      //create datatable. GetData is a method to fetch the data. 
      DataTable dt = GetData(cmd); 

      //Get data from database to bytes. 
      Byte[] bytes = (Byte[])dt.Rows[0]["img_file"]; 

      //Defining the size to display data. 
      int outputSize = 100; 


       if (bytes.Length > 0) 
       { 

        // Open a stream for the image and write the bytes into it 
        System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes, true); 
        stream.Write(bytes, 0, bytes.Length); 
        Bitmap bmp = new Bitmap(stream); 
        Size new_size = new Size(); 

        //resize based on the longer dimension 

        if (bmp.Width > bmp.Height) 
        { 
         new_size.Width = outputSize; 
         new_size.Height = (int)(((double)outputSize/(double)bmp.Width) * (double)bmp.Height); 

        } 
        else 
        { 
         new_size.Width = (int)(((double)outputSize/(double)bmp.Height) * (double)bmp.Width);        
         new_size.Height = outputSize; 

        } 
        Bitmap bitmap = new Bitmap(new_size.Width, new_size.Height, bmp.PixelFormat); 
        Graphics new_g = Graphics.FromImage(bitmap); 
        new_g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
        new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
        new_g.DrawImage(bmp, -1, -1, bitmap.Width + 1, bitmap.Height + 1); 
        bmp.Dispose(); 
        bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
        bitmap.Dispose(); 
        new_g.Dispose(); 
        stream.Close(); 
       } 
      } 

private DataTable GetData(MySqlCommand cmd) 
{ 

    DataTable dt = new DataTable(); 
    //String strConnString = System.Configuration.ConfigurationManager .ConnectionStrings["conString"].ConnectionString; 

    MySqlConnection con = new MySqlConnection(db); 
    MySqlDataAdapter sda = new MySqlDataAdapter(); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = con; 

    try 
    { 
     con.Open(); 
     sda.SelectCommand = cmd; 
     sda.Fill(dt); 
     return dt; 
    } 

    catch 
    {   return null; 
    } 

    finally 
    { con.Close(); 
     sda.Dispose(); 
     con.Dispose(); 
    } 
} 
} 
0
  1. Je redimensionnerais les images sur la page utilisée pour les afficher. Où sont-ils affichés?

ou

  1. je serais redimensionner les images au moment où ils sont enregistrés
+0

Ils sont affichés sur une page directement. Je suis très nouveau sur asp.net. Pourriez-vous s'il vous plaît me dire comment le redimensionnement est fait avant le téléchargement. U peut se référer ce lien: http: //www.codeproject.com/KB/aspnet/asp_net_and_mysql.aspx pour plus de clarification. Il a été construit par moi –

0

Si l'on suppose votre seul défi est à seule échelle les images (soit avant téléchargement ou lors de leur récupération) ... voici un code que j'utilise pour obtenir des dimensions à l'échelle pour une image (pour s'adapter à des dimensions spécifiques) ... vous pouvez coller quelque part dans une classe d'imagerie

Notez qu'il y en a beaucoup approches ...

public static Size getScaledDimensions(Image img, Int32 maxW, Int32 maxH) 
{ 

    //check if image is already within desired dimensions 
    if (img.Height <= maxH & img.Width <= maxW) 
    { 
     Size orgsize = new Size(img.Width, img.Height); 
     return orgsize; // no need to rescale 
    } 
    else //proceed with rescaling 
    { 

     int finalH; 
     int finalW; 

     //use height/width ratio to determine our new dimensions 

     double hwRatio = (double)img.Height/(double)img.Width; 


      int newW = (int) (maxH/ hwRatio); 
      int newH = (int) (hwRatio * maxW); 

      //make sure we scale the right dimension 
      if (newW <= maxW) // scale width 
      { 
       finalH = maxH; 
       finalW = newW; 
      } 
      else 
      { // scale height 
       finalH = newH; 
       finalW = maxW; 
      }//end if 
     Size newsize = new Size(finalW, finalH); 

     return newsize; 

    } 
+0

c'est un bon code mais pourriez-vous s'il vous plaît me dire comment cela pourrait être mis en œuvre pour binarywriter. –

Questions connexes