ASP.NET圖片上傳和截取

来源:https://www.cnblogs.com/birdGe/archive/2019/11/27/11942614.html
-Advertisement-
Play Games

一、介紹:圖片的上傳直接使用ajax就可以了,截取圖片的話使用到Jcrop插件。 圖片上傳資料:https://www.jb51.net/article/87654.htm 截取圖片插件:http://code.ciaoca.com/jquery/jcrop/ 前端 添加引用 1 <script s ...


一、介紹:圖片的上傳直接使用ajax就可以了,截取圖片的話使用到Jcrop插件。

  圖片上傳資料:https://www.jb51.net/article/87654.htm

  截取圖片插件:http://code.ciaoca.com/jquery/jcrop/

前端

添加引用

1     <script src="../js/jquery.min.js"></script>
2     <link href="../Css/jquery.Jcrop.min.css" rel="stylesheet" />
3     <script src="../js/jquery.Jcrop.min.js"></script>

 

HTML代碼

1    <input type="file" name="photo" id="photo" value="" placeholder="免冠照片">
2     <input type="button" onclick="postData();" value="下一步" name="" style="width: 100px; height: 30px;">
3     <img id="showPhoto" />

JavaScript代碼

 1  <script type="text/javascript">
 2         //文件上傳方法
 3         function postData() {
 4             var formData = new FormData();
 5             //上傳文件的變數名
 6             formData.append("Filedata", $("#photo")[0].files[0]);
 7             $.ajax({
 8                 url: "/ashx/upload.ashx?action=upload", /*介面功能變數名稱地址*/
 9                 type: 'post',
10                 data: formData,
11                 contentType: false,
12                 processData: false,
13                 success: function (res) {
14                     $("#showPhoto").attr("src", res);
15                     CutPhoto();
16                 }
17             })
18         }
19         //截圖
20         function CutPhoto() {
21             var jcropApi;
22             $('#showPhoto').Jcrop({
23                 //選框選定時的事件
24                 onSelect: function (c) {
25                     $.ajax({
26                         url: "/ashx/upload.ashx?action=cut",
27                         type: "post",
28                         data: {
29                             "x": c.x,
30                             "y": c.y,
31                             "width": c.w,
32                             "height": c.h,
33                             "imgSrc": $("#showPhoto").attr("src")
34                         },
35                         success: function () {
36 
37                         }
38                     });
39                 },
40                 allowSelect: true,//允許新選框
41                 baseClass: 'jcrop'
42             }, function () {
43                 jcropApi = this;
44             });
45         }
46     </script>

後臺

添加一個一般處理程式upload.ashx

代碼

 1    public class upload : IHttpHandler
 2     {
 3 
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             context.Response.ContentType = "text/plain";
 7             //判斷action
 8             string action = context.Request["action"];
 9             if (action == "upload")
10             {
11                 Upload(context);
12             }
13             else if (action == "cut")
14             {
15                 CutPhoto(context);
16             }
17         }
18 
19         public bool IsReusable
20         {
21             get
22             {
23                 return false;
24             }
25         }
26         /// <summary>
27         /// 文件上傳
28         /// </summary>
29         private void Upload(HttpContext context)
30         {
31             //獲取文件
32             HttpPostedFile file = context.Request.Files["Filedata"];
33             //判斷文件是否為空
34             if (file != null)
35             {
36                 //獲取文件名
37                 string fileName = Path.GetFileName(file.FileName);
38                 //獲取文件擴展名
39                 string fileExt = Path.GetExtension(fileName);
40                 //判斷文件擴展名是否正確
41                 if (fileExt == ".jpg")
42                 {
43                     //獲得文件路徑
44                     string filePath = "/UploadFile/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day;
45                     //判斷文件是否存在
46                     if (!System.IO.Directory.Exists(context.Request.MapPath(filePath)))
47                     {
48                         //不存在則創建
49                         Directory.CreateDirectory(context.Request.MapPath(filePath));
50                     }
51                     //生成新的文件名
52                     string newFileName = filePath + "/" + Guid.NewGuid() + fileExt;
53                     //保存文件
54                     file.SaveAs(context.Request.MapPath(newFileName));
55                     //返迴文件路徑
56                     context.Response.Write(newFileName);
57                 }
58             }
59         }
60         /// <summary>
61         /// 截取圖片
62         /// </summary>
63         /// <param name="context"></param>
64         private void CutPhoto(HttpContext context)
65         {
66             int x = Convert.ToInt32(context.Request["x"]);
67             int y = Convert.ToInt32(context.Request["x"]);
68             int width = Convert.ToInt32(context.Request["width"]);
69             int height = Convert.ToInt32(context.Request["height"]);
70             string imgSrc = context.Request["imgSrc"];
71             //創建畫布
72             using (Bitmap bitmap = new Bitmap(width, height))
73             {
74                 //創建畫筆
75                 using (Graphics g = Graphics.FromImage(bitmap))
76                 {
77                     //創建圖片
78                     using (Image img = Image.FromFile(context.Request.MapPath(imgSrc)))
79                     {
80                         //截取圖片
81                         //第一個參數:要畫的圖片
82                         //第二個參數:畫多大
83                         //第三個參數:畫圖片的哪個部分
84                         g.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
85                         string newImgName = Guid.NewGuid().ToString()+".jpg";
86                         string dir = "/UploadFile/" + newImgName;
87                         bitmap.Save(context.Request.MapPath(dir),System.Drawing.Imaging.ImageFormat.Jpeg);
88                     }
89                 }
90             }
91         }
92     }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • using System.Reflection; static void ShowEnvironmentInfoDemo() { Type type = typeof(Environment); PropertyInfo[] pis = type.GetProperties(); if (pis !... ...
  • private void ClickCmdExecuted(object obj) { ContentOb = new ObservableCollection<string>(); Task.Run(() => { while (!cts.IsCancellationRequested) { Co ...
  • 修改屏幕DPI,會觸發控制項的Unloaded/Loaded 現象/重現案例 對Unloaded/Loaded的印象: FrameworkElement, 第一次載入顯示時,會觸發Loaded。元素被釋放時,會觸發Unloaded。視窗Show/Close時,視覺樹變化都會觸發載入事件 MenuIte ...
  • 最近做項目的時候,需要對接廠商提供的 IP 攝像頭。但是他們只提供了 C++ 的 SDK,沒辦法,只能開始擼 C 的 SDK Helper 類。本篇文章主要記錄了對接 C++ DLL 需要註意的幾個地方,以及常見類型的轉換。 要對接 C++ 的 DLL,首先得知道如何引用 DLL 內的方法。在 C ...
  • 現象: 項目中導入Ocelot後,swagger頁面無法正常顯示,查看異常發現 Ocelot.Raft.RaftController 中的 Action 配置不完全,swagger掃描時不能正確生成 swagger.json 解決方法: 在掃描中隱藏Ocelot的controller,避免被swag ...
  • 一、NetworkStream的作用 和先前的流有所不同,NetworkStream的特殊性可以在它的命名空間中得以瞭解(System.Net.Sockets),聰明的你馬上就會反應過來:既然是在網路中傳輸的流,那必然有某種協議或者規則約束他,不錯,這種協議就是Tcp/Ip協議。這個是什麼東西?別急 ...
  • .net core mvc 發佈有很長時間了,但是一直沒有用過,最近突然想開發一個導航網站,於是就抽時間開發了一個專門為開發者使用的導航站點,想看的話請移步我的上一篇博客 "https://www.cnblogs.com/weiwin/p/11941684/" 這個網站雖然小但是網站該有的功能它都有 ...
  • 騰訊雲驗證碼是為網頁、App、小程式開發者提供的安全驗證服務,基於騰訊多年的大數據積累和人工智慧決策引擎,構建智能分級驗證模型,最大程度保護業務安全的同時,提供更精細化的用戶體驗。 騰訊雲-->驗證碼控制台 騰訊雲-->驗證碼控制台 在驗證碼控制台註冊 AppID 和 AppSecret,註冊後在控 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...