简体   繁体   中英

Images are getting blur after retrieve from database

Following is the code to retrieve image from database and then saving it to a folder.

public string BinarytoNewsImage(int ID)
        {
            byte[] btimage = null;
            string image = "";
            string filename = null;
            int mediaid;

            DataSet dsNews = new DataSet();
            adp = new SqlDataAdapter("Select Top 1 * from tblNew Where intNewId=" + ID, offcon);
            adp.Fill(dsNews, "tblNews1");
            if (dsNews.Tables["tblNews1"].Rows.Count > 0)
            {
                if (dsNews.Tables["tblNews1"].Rows[0]["strImage"] != DBNull.Value)
                {
                    btimage = (byte[])dsNews.Tables["tblNews1"].Rows[0]["strImage"];
                    mediaid = Convert.ToInt32(dsNews.Tables["tblNews1"].Rows[0]["intMediaId"].ToString());
                    filename = dsNews.Tables["tblNews1"].Rows[0]["strfilename"].ToString();
                    image = BinarytoImage(btimage, mediaid);
                }
                else
                {
                    filename = dsNews.Tables["tblNews1"].Rows[0]["strfilename"].ToString();
                    image = "http://www.patrika.com/media/" + filename;
                }
            }

            return image;
        }

        public string BinarytoImage(byte[] stream, int ID)
        {
            string ImagePath = "";
            string Image = ID + ".jpg";

            var URL = System.Configuration.ConfigurationManager.AppSettings["ImagePath"].ToString();

            string FolderName = new Uri(URL).LocalPath;

            var help = HttpContext.Current.Server.MapPath(FolderName);

            if (Directory.Exists(HttpContext.Current.Server.MapPath(FolderName)))
            {
                string[] files = Directory.GetFiles(HttpContext.Current.Server.MapPath(FolderName), ID + ".jpg");
                if (files.Length > 0)
                {
                    ImagePath = URL + ID + ".jpg";
                }
                else
                {
                    using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
                    {
                        MS.Write(stream, 0, stream.Length);

                        System.Drawing.Image img = System.Drawing.Image.FromStream(MS);

                        img.Save(help + ID + ".jpg", System.Drawing.Imaging.ImageFormat.Gif);
                        img.Dispose();
                        img = null;
                        ImagePath = URL + ID + ".jpg";
                    }
                }
            }
            return ImagePath;
        }

Everything is working fine the images are saving to a folder but my problem is images are getting blur after retrieval.

I just don't know the reason as when I am using another code for retrieval than images are coming fine but are not saved to folder:

DataSet dsNews = new DataSet();
            adp = new SqlDataAdapter("Select Top 1 * from tblNew Where intNewId=901371", con);
            adp.Fill(dsNews, "tblNews1");

            if (dsNews.Tables["tblNews1"].Rows[0]["strImage"] != DBNull.Value)
            {
                byte[] btimage = (byte[])dsNews.Tables["tblNews1"].Rows[0]["strImage"];
                Response.ContentType = "image/jpeg";
                Response.BinaryWrite(btimage);
            }

I need those images to be saved to folder so that I don't have to call database after once image comes.

Wouldn't it help to change this line

    img.Save(help + ID + ".jpg", System.Drawing.Imaging.ImageFormat.Gif);

to store it as JPEG rather? as that's the source format

EDIT: Your are not moving the stream pointer back to the start.

Try change these lines:

            using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
                {
                    MS.Write(stream, 0, stream.Length);

                    System.Drawing.Image img = System.Drawing.Image.FromStream(MS);
             ...

To

            using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
                {
                    MS.Write(stream, 0, stream.Length);
                    MS.Seek(0, SeekOrigin.Begin);
                    System.Drawing.Image img = System.Drawing.Image.FromStream(MS);

...

I write the common method, all is ok. Maybe your byte[]stream is not right,pls check.

 byte[] stream = File.ReadAllBytes(@"D:\YWG\123.jpg");
            using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
            {
                MS.Write(stream, 0, stream.Length);

                using (Image img = Image.FromStream(MS))
                {
                    img.Save(@"D:\dd.jpg", System.Drawing.Imaging.ImageFormat.Gif);
                } 
            }

I see the dest file "dd.jpg" is ok.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM