一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C# - C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能示例

C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能示例

2022-03-10 14:08changuncle C#

這篇文章主要介紹了C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#圖片上傳、保存、水印、縮略圖等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能。分享給大家供大家參考,具體如下:

伴隨移動(dòng)設(shè)備地普及,處理圖片、視頻等需求也變得越來(lái)越基礎(chǔ),這里介紹的是圖片的存儲(chǔ)。

上傳圖片必須使用form表單提交的方式,我只知道這一種方法,如果大家知道其他方法的話請(qǐng)留言。

保存圖片、加水印和生成縮略圖這三種功能最好各自放在單獨(dú)的方法中,盡量降低耦合度,提高代碼復(fù)用程度,除此之外我們平常寫代碼是也要盡量做到方法功能的唯一性。

前臺(tái)代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form method="POST" enctype="multipart/form-data" action="UploadImg.ashx">
  <table>
    <tr>
      <td>func:</td>
      <td><input type="text" name="func"/></td>
    </tr>
    <tr>
      <td>用戶Id:</td>
      <td><input type="text" name="userId"/></td>
    </tr>
    <tr>
      <td>頭像:</td>
      <td><input type="file" name="icon"/></td>
    </tr>
    <tr>
      <td>水印:</td>
      <td><input type="text" name="waterMark"/></td>
    </tr>
  </table>
  <input type="submit" value="提交"/>
</form>

后臺(tái)代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
private string UploadImage(HttpContext context)
{
  try
  {
    System.IO.Stream stream = context.Request.Files["icon"].InputStream;
    //返回的圖片路徑可以存儲(chǔ)在數(shù)據(jù)庫(kù)中
    string imageUrl = SaveImage(stream, "Icon", "蟈蟈");
    string thumbnailImageUrl = SaveThumbnailImage(stream, "Icon");
    string thumbnailImageUrlWithWatermark = SaveThumbnailImage(ConfigurationManager.AppSettings["AttachmentsDirectory"] + imageUrl, "Icon");
    return "上傳成功!";
  }
  catch (Exception ex)
  {
    return "上傳失敗!";
  }
}
private string SaveImage(Stream stream, string folderName, string waterMark)
{
  try
  {
    string fileName = Guid.NewGuid() + ".jpg";
    string path = ConfigurationManager.AppSettings["AttachmentsDirectory"];
    path = Path.Combine(path, folderName + "\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\");
    string imageUrl = "/" + folderName + "/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
    if (!string.IsNullOrEmpty(waterMark))
    {
      Image imgSource = Image.FromStream(stream);
      AddWatermarkAndSave(path, fileName, waterMark, imgSource, imgSource.Height - 300, 10, Color.Red,
        new Font("宋體", 40));
    }
    else
    {
      byte[] buffer = new byte[stream.Length];
      stream.Read(buffer, 0, buffer.Length);
      if (!Directory.Exists(path))
      {
        Directory.CreateDirectory(path);
      }
      System.IO.FileStream fs = new System.IO.FileStream(path + fileName, System.IO.FileMode.OpenOrCreate,
        System.IO.FileAccess.Write);
      fs.Write(buffer, 0, buffer.Length);
      fs.Flush();
      fs.Close();
    }
    return imageUrl + fileName;
  }
  catch (Exception ex)
  {
    return "";
  }
}
private string SaveThumbnailImage(Stream stream, string folderName)
{
  try
  {
    string fileName = Guid.NewGuid() + ".jpg";
    string path = ConfigurationManager.AppSettings["AttachmentsDirectory"];
    path = Path.Combine(path, folderName + "\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\");
    string imageUrl = "/" + folderName + "/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(GetFalse);
    //數(shù)據(jù)源來(lái)自Stream
    Image image = System.Drawing.Bitmap.FromStream(stream);
    System.Drawing.Image thumbnailImage = image.GetThumbnailImage(64, 64, myCallback, IntPtr.Zero);
    thumbnailImage.Save(path + fileName);
    thumbnailImage.Dispose();
    return imageUrl + fileName;
  }
  catch (Exception ex)
  {
    return "";
  }
}
private string SaveThumbnailImage(string originalFileName, string folderName)
{
  try
  {
    string fileName = Guid.NewGuid() + ".jpg";
    string path = ConfigurationManager.AppSettings["AttachmentsDirectory"];
    path = Path.Combine(path, folderName + "\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\");
    string imageUrl = "/" + folderName + "/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(GetFalse);
    //數(shù)據(jù)源來(lái)自File
    Image image = System.Drawing.Bitmap.FromFile(originalFileName);
    System.Drawing.Image thumbnailImage = image.GetThumbnailImage(64, 64, myCallback, IntPtr.Zero);
    thumbnailImage.Save(path + fileName);
    thumbnailImage.Dispose();
    return imageUrl + fileName;
  }
  catch (Exception ex)
  {
    return "";
  }
}
private bool GetFalse()
{
  return false;
}
/// <summary>
/// 圖片加文字水印
/// </summary>
/// <param name="fileName"> </param>
/// <param name="text">水印文字,如果是多行用分號(hào)隔開(kāi)</param>
/// <param name="img">圖片</param>
/// <param name="paddingTop">上邊距</param>
/// <param name="paddingLeft">左邊距</param>
/// <param name="textColor">文字顏色</param>
/// <param name="textFont">字體</param>
/// <param name="path">保存地址</param>
/// <returns></returns>
private bool AddWatermarkAndSave(string path, string fileName, string text, Image img,
      int paddingTop, int paddingLeft, Color textColor, Font textFont)
{
  text = text + ";" + "當(dāng)前時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm");
  if (!Directory.Exists(path))
  {
    Directory.CreateDirectory(path);
  }
  textFont = new Font("宋體", 19);
  Bitmap bm = new Bitmap(img);
  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bm);
  System.Drawing.Brush b = new SolidBrush(textColor);
  string[] str = text.Split(';');
  for (int i = 0; i < str.Length; i++)
    g.DrawString(str[i], textFont, b, paddingLeft, paddingTop + 33 * i);
  g.Dispose();
  bm.Save(path + fileName, ImageFormat.Jpeg);
  bm.Dispose();
  return true;
}

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

原文鏈接:https://blog.csdn.net/xiaouncle/article/details/54883327

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美第十页 | 手机在线免费观看日本推理片 | 青草国内精品视频在线观看 | 日韩一级免费毛片 | 91日本在线观看亚洲精品 | 99热在这里只有精品 | 91啦丨porny丨蝌蚪 | 欧美色图亚洲天堂 | 高清黄色直接看 | 国产视频久久久 | mm131亚洲精品久久 | 成人性生交大片免费看软件 | 日本888 xxxx| 99视频九九精品视频在线观看 | 亚洲va在线va天堂va偷拍 | 羞羞一区二区三区四区片 | 91久久综合 | 国产一区二区免费福利片 | 国产日韩欧美视频 | 亚飞与亚基国语1080p在线观看 | 99精品视频在线观看免费 | 国产手机在线观看 | 国产福利资源 | 91热国内精品永久免费观看 | 99re热这里只有精品视频 | 精品在线小视频 | 欧美gayxxxx| 91亚洲精品丁香在线观看 | 日韩欧美国产一区 | 国产免费又粗又猛又爽视频国产 | 四缺一写的小说 | 二次元美女扒开内裤露尿口 | 91大神精品| 欧美ay| 亚洲精品久久啪啪网站成年 | 亚洲日本中文字幕天天更新 | 亚洲AV久久无码精品九九软件 | 国产欧美日韩综合二区三区 | 大肚孕妇的高h辣文 | 国产性做久久久久久 | 男同gay玩奴男同玩奴 |