0

以下は、データベースから画像を取得してフォルダーに保存するコードです。

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;
        }

すべてが正常に機能しており、画像はフォルダーに保存されていますが、私の問題は、取得後に画像がぼやけていることです。

画像が正常に取得されているのにフォルダに保存されていないため、取得に別のコードを使用しているときの理由がわかりません。

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);
            }

画像が来たらデータベースを呼び出す必要がないように、これらの画像をフォルダーに保存する必要があります。

4

2 に答える 2

1

この行を変更するのに役立ちませんか

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

むしろJPEGとして保存するには?それがソースフォーマットなので

編集: あなたはストリームポインタを最初に戻していません。

次の行を変更してみてください。

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

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

            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);

..。

于 2013-01-04T13:37:48.240 に答える
0

私は一般的な方法を書きます。すべて問題ありません。あなたのバイト[]ストリームが正しくないかもしれません。確認してください。

 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);
                } 
            }

destファイル「dd.jpg」は問題ありません。

于 2013-01-04T13:58:48.807 に答える