1. 程式人生 > >通過Stream把Image轉成Byte[],然後儲存到資料庫的方法

通過Stream把Image轉成Byte[],然後儲存到資料庫的方法

 

 Image轉成Byte[]的問題把我這個入門級的Asp.Net使用者快要搞暈了,費了很大的勁,查了很多的文章,終於搞定了,把方法寫出來,希望能幫助遇到同樣問題的人.

程式目的是做一個可以上傳照片,然後生成縮圖,把縮圖儲存到資料庫image欄位中,供顯示照片時動態顯示輸出.

我把關鍵程式碼列出來:

//下面是根據上傳的檔案,產生縮圖,然後儲存到資料庫image表中(為將問題簡單化,這裡把表的欄位做了減少).

        string fstr = FileUpload1.PostedFile.FileName; ;//上傳的檔名
        string fmime = FileUpload1.PostedFile.ContentType;//檔案的MIME型別
        string sql;
        int fsize = FileUpload1.PostedFile.ContentLength; //檔案大小
       
        //利用Bitmap類獲得影象的尺寸
        Bitmap bmp = new Bitmap(fstr);
        int imgH = bmp.Height;
        int imgW = bmp.Width;
        //縮圖保持原圖片比例,計算出大小
        float simg1,simg2;
        if (imgW > imgH)
        {
            //橫向圖片
            simg1 = 100;
            simg2 = simg1/imgW * imgH;
        }
        else
        {
            //縱向圖片
            simg2 = 100;
            simg1 = simg2/imgH * imgW;
        }

        //生成縮圖
        System.Drawing.Image smallimg = bmp.GetThumbnailImage((int)simg1, (int)simg2, null, IntPtr.Zero);
        MemoryStream ms = new MemoryStream();
        smallimg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//將影象儲存到記憶體流中
        byte[] data ={ }; //建立一個位元組陣列,用於儲存影象資料
        data=ms.ToArray();//把流的資料儲存到陣列
        fsize = (int)ms.Length;//流資料大小

        //生成SQL語句,因為使用了位元組陣列,必須使用帶引數的SQL,否則無法執行,@1就是引數
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
        conn.Open();
        sql = "insert into [image] (itype,imagedata,isize) values('" + fmime + "',@1," + fsize + ")";
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add(new SqlParameter("@1", SqlDbType.Image));
        cmd.Parameters["@1"].Value = data;
        int count = cmd.ExecuteNonQuery();

//下面是動態顯示影象資料

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
        conn.Open();
        string sql = "select * from [image] where id=1"; //這裡id使用的是1,實際可以根據需要傳一個值
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.CommandTimeout = 60;
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            Response.ContentType = dr["itype"].ToString().Trim();
            //輸出圖片檔案二進位制資料
            Response.OutputStream.Write((byte[])dr["imagedata"], 0, (int)dr["isize"]);
            Response.End();
        }

/*補充說明:

*連線資料庫部分的程式碼可以做成一個類,供多次引用,而不必要每次重複地寫出來.

*如果要將動態顯示出來的影象用一個Image控制元件顯示出來的話,可以把動態顯示資料的程式碼做成一個單獨的檔案例

*如"showimage.aspx",然後將Image的src地址寫為"showimage.aspx",如果需要動態顯示多個影象,可以給"showimage.aspx"傳引數進

*去,改變id的值即可.

*/

相關推薦

通過StreamImageByte[],然後儲存資料庫方法

   Image轉成Byte[]的問題把我這個入門級的Asp.Net使用者快要搞暈了,費了很大的勁,查了很多的文章,終於搞定了,把方法寫出來,希望能幫助遇到同樣問題的人. 程式目的是做一個可以上傳照片,然後生成縮圖,把縮圖儲存到資料庫image欄位中,供顯示照片時動態顯示

Chapter 6 自定義資料協議【第十三講】 通過大端序列方法將4個位元組int byte陣列

第一種方法: 通過大端序列方法將4個位元組int轉成 byte陣列大端序列方法:int2bytes:將int 從高到低位分別儲存到 byte[0] ~ byte[3]    byte[] bytes = new byte[4];     for (int i = 0; i &

Python爬蟲系列(四):Beautiful Soup解析HTML之HTMLPython對象

調用 nor 結束 版本 現在 name屬性 data 官方文檔 get 在前幾篇文章,我們學會了如何獲取html文檔內容,就是從url下載網頁。今天開始,我們將討論如何將html轉成python對象,用python代碼對文檔進行分析。 (牛小妹在學校折騰了好幾天,也沒把h

java利用ffmpeg圖片yuv格式

exceptio ioe ever readline filepath uid ont ati cep 安裝ffmpeg: 安裝目錄:/usr/share/ffmpeg 創建ffmpeg目錄,解壓ffmpeg-3.4.1.tar.bz2 tar -xjvf ffmpeg-3

使用Exe4jjarexe

位操作 nbsp gpo 但是 生成 exe 綠色 pos jdk版本 把java程序轉成可執行的.exe。 上網搜索了一下。使用exe4j可以。 但是轉化過程總有一些小差錯。版本原因,或者其他原因。 本人使用exe4j版本 exe4j_windows-x64_5.0,在

如何scratch一個swf文件

post 就是 如何 div 殺毒 online BE class 方案 scratch作為一款啟蒙用的積木式編程軟件,非常受人歡迎,但是,現在有一個問題就是,無法將之轉變成一個可執行文件,以便和周邊的人們分享。 我個人認為把scratch轉變為一個可執行的exe文件,並不

用手機如何PDFPPT文件

alt ESS com img 來看 mage 應用商店 是否 images PDF格式的文件是我們經常見到的一種文件格式,有時我們需要將這種格式轉換為PPT格式,這是如何轉換的呢,一起來看看如何將PDF格式轉換為PPT的吧。 準備工作:迅捷PDF轉換器,需要轉換的PDF文

數字大寫的(一二三)

public static string ChineseTONumber(string chineseStr1) {     string numStr = "0123456789";     string chineseStr = "零一二三四五六七八九";

將File或者InputStreambyte陣列

package com.yinhai.demo.utils; import java.io.*; /** * 將File或者InputStream轉成byte陣列 * * Created by Blossom on 2018/7/28. */ public class FileUtil

如何免費pdfppt

如何免費把pdf轉成ppt,其實pdf轉換成ppt是極其簡單的,使用wps軟體直接轉換就可以了,但是前提是需要充值成會員。當然我們常見的pdf轉換軟體也是可以的。比如像我們常用的北斗pdf轉換器,將pdf轉換成ppt時,原始檔為ppt的pdf檔案進行精準快速識別後進行轉換ppt,俗稱恢復成原

牛客:字串整數

題目描述: 將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。 輸入描述: 輸入一個字串,包括數字母符號,可以為空。 輸出描

Springboot中引入本地jar包,並通過maven專案打可執行jar包

       最近把以往的老專案用SpringBoot進行了重構,老專案中有部分本地依賴包不是放在maven庫裡的,是本地開發直接引入,需要在mvn package的時候把本地依賴jar也打進可執行包中。 這種通用問題,在網上找了一圈卻沒發現什麼好的解決辦

javahtml圖片的方法

程式碼 1.1 html模版 static String HtmlTemplateStr = "<style type=\"text/css\">"+   "body {background-color: yellow}"+ "h1 {background

(劍指offer)字串整數

時間限制:1秒 空間限制:32768K 熱度指數:141595 本題知識點: 字串 題目描述 將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法

java 反射轉換類(map轉為java bean , javabean map)

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import

FlashJavascript/HTML5

SmokeScreen是 這樣一個開源軟體,它可以把Flash的swf檔案轉成Javascript/HTML5,它的口號是:Flash without plugin。為什麼要這樣做呢?它說主要是因主Apple的iPhone/iPod/iPad不支援flash,而且看似Steve Jobs也不願意在以後支

物件陣列

var json = { name: 'shskfh', id: 1, profit: 20, percent: '20%',

數字人民幣貨幣形式

formatMoney = (num) => { return `¥ ${num}`.replace(/\B(?=(\d{3})+(?!\d))/g, ","); }; format

不要 svg base64

不是什麼新知識,一個小技巧而已。 今天遇到一個專案中使用純色圖示的問題,用字型麻煩用圖片low,所以就想直接用svg,畢竟只有一兩個圖示。 第一想法是用 DataURI,然後想到了之前 CSS-tricks 的文章,翻了下做下彙總: 不建議把 svg 轉 base64 來用 base

Gson物件json格式的字串

最近在做一個java web service專案,需要用到jason,本人對java不是特別精通,於是開始搜尋一些java平臺的json類庫。 發現了google的gson,因為之前對於protocolbuf有一些瞭解,帶著一些好奇心,我開始使用了gson。