激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#實現的上傳圖片、保存圖片、加水印、生成縮略圖功能示例

C#實現的上傳圖片、保存圖片、加水印、生成縮略圖功能示例

2022-03-10 14:08changuncle C#

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

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

伴隨移動設備地普及,處理圖片、視頻等需求也變得越來越基礎,這里介紹的是圖片的存儲。

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

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

前臺代碼:

?
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>

后臺代碼:

?
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;
    //返回的圖片路徑可以存儲在數據庫中
    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);
    //數據源來自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);
    //數據源來自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">水印文字,如果是多行用分號隔開</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 + ";" + "當前時間:" + 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;
}

希望本文所述對大家C#程序設計有所幫助。

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

延伸 · 閱讀

精彩推薦
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
主站蜘蛛池模板: 免费午夜视频在线观看 | 黄色欧美精品 | 日韩视频一区二区在线观看 | 99精品国产小情侣高潮露脸在线 | 久草成人在线观看 | 特级黄一级播放 | 新久草在线视频 | 欧美高清一级片 | 久久精品爱 | 国产亚洲精品美女久久久 | 午夜视频大全 | 欧美大屁股精品毛片视频 | a视频在线看 | 他也色在线视频 | 羞羞视频一区 | 国产精品视频一区二区三区综合 | 黄色av免费网站 | 久久最新免费视频 | 日韩色视频在线观看 | 91重口视频 | 久久精品小短片 | 色综合777 | 欧美一区在线观看视频 | av电影网在线观看 | 久久久tv| 鲁丝片一区二区三区免费入口 | 欧美视频一二三区 | 欧美精品18videos性欧美 | 免费高清一级欧美片在线观看 | 电影av在线 | 91精品国产综合久久久动漫日韩 | 日本在线视频一区二区三区 | 国产精品久久久久久久久久久久午夜 | 日日草夜夜 | 日本教室三级在线看 | 久久久婷婷一区二区三区不卡 | 久久久久久久久国产 | 亚洲成人福利在线 | 无遮挡一级毛片视频 | 亚洲一级电影在线观看 | 本色视频aaaaaa一级网站 |