獲取http和ftp地址的圖片

来源:http://www.cnblogs.com/sxw117886/archive/2017/06/29/7094105.html
-Advertisement-
Play Games

根據http和ftp圖片地址獲取對應圖片的縮略圖和原圖 public class GetBitmapImageClass { public BitmapSource GetImageHttp(string url,int width) { var image = new BitmapImage(); ...


根據http和ftp圖片地址獲取對應圖片的縮略圖和原圖

public class GetBitmapImageClass
    {
        public  BitmapSource GetImageHttp(string url,int width)
        {
            var image = new BitmapImage();
            int BytesToRead = 100;
            if (!string.IsNullOrEmpty(url))
            {
                WebRequest request = WebRequest.Create(new Uri(url, UriKind.Absolute));
                request.Timeout = -1;
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                BinaryReader reader = new BinaryReader(responseStream);
                MemoryStream memoryStream = new MemoryStream();

                byte[] bytebuffer = new byte[BytesToRead];
                int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);

                while (bytesRead > 0)
                {
                    memoryStream.Write(bytebuffer, 0, bytesRead);
                    bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
                }

                image.BeginInit();
                image.DecodePixelWidth = width;
                image.CacheOption = BitmapCacheOption.OnLoad;
                memoryStream.Seek(0, SeekOrigin.Begin);

                image.StreamSource = memoryStream;
                image.EndInit();
                image.Freeze();
                memoryStream.Close();
                reader.Close();
                responseStream.Close();
                response.Close();
            }
            return image;
        }

        public BitmapSource GetImageFtp(string url, int width)
        {
            var image = new BitmapImage();
            if (!string.IsNullOrEmpty(url))
            {
                FtpWebRequest reqFtp;
                reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

                reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFtp.UseBinary = true;
                FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                MemoryStream mStream = new MemoryStream();
                ftpStream.CopyTo(mStream);
                mStream.Position = 0;
                int length = (int)mStream.Length;
                byte[] returnbyte = new byte[length];
                mStream.Read(returnbyte, 0, length);

                mStream.Close();
                ftpStream.Close();
                response.Close();

                System.IO.MemoryStream stream = new System.IO.MemoryStream(returnbyte);
                image.BeginInit();
                image.DecodePixelWidth = width;
                image.CacheOption = BitmapCacheOption.OnLoad;
                stream.Seek(0, SeekOrigin.Begin);

                image.StreamSource = stream;
                image.EndInit();
                image.Freeze();
                stream.Close();
            }
            return image;

        }


        [DllImport("gdi32.dll", SetLastError = true)]
        private static extern bool DeleteObject(IntPtr hObject);

        public BitmapSource ToBitmapSource(System.Drawing.Bitmap bmp)
        {
            try
            {
                var ptr = bmp.GetHbitmap();
                var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    ptr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                DeleteObject(ptr);
                return source;
            }
            catch
            {
                return null;
            }
        }

        //獲取縮略圖
        public BitmapSource GetBitImage(string imageLink)
        {
            //"http://172.17.1.231:8083/3050273262379466760/2017/05/28/09/340800100999/09163448402.jpg?fid=1267520"
            if (imageLink.StartsWith("http://"))
            {
                return GetImageHttp(imageLink,200);
            }
            //ftp格式的
            else if (imageLink.StartsWith("ftp://"))
            {
                return GetImageFtp(imageLink, 200);
            }
        }

        //獲取原圖
        public BitmapSource GetHightBitImage(string imageLink)
        {
            //"http://172.17.1.231:8083/3050273262379466760/2017/05/28/09/340800100999/09163448402.jpg?fid=1267520"
            if (imageLink.StartsWith("http://"))
            {
                return GetImageHttp(imageLink, 0);
            }
            //ftp格式的
            else if (imageLink.StartsWith("ftp://"))
            {
                return GetImageFtp(imageLink, 0);
            }
        }

    }
View Code

 


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

-Advertisement-
Play Games
更多相關文章
  • 引言大家好像對分析源碼厭倦了,說實在我也會厭倦,不過不看是無法分析其後面的東西,從易到難是一個必要的過程。今天說下EventBus,前幾天園裡的大神已經把其解刨,我今天就藉著大神的肩膀,分析下在eShop項目中EventBus的實現。最近發覺轉發文章不寫出處的,特此加上鏈接:http://inday... ...
  • 代碼: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace SunCreate.Comba ...
  • 代碼: <Grid> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="3*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*"/> <ColumnDefin ...
  • 引用DLL: WPFToolkit WPFVisifire.Charts.dll WPFVisifire.Gauges.dll 1、柱狀圖 代碼: public void BindChart1() { List<string> colorList = new List<string>(); List ...
  • 一、擴展方法的語法 在視圖中使用擴展方法的時候 如果擴展方法定義的類在其他命名空間,需要首先引用該命名空間,才能使用該擴展方法 static class 靜態類名 { static 返回類型 擴展方法名(this 擴展的類型 對象名,[其他參數列表]) { //擴展方法代碼 } } eg1:給Str ...
  • 一。關於安裝 1.可以直接通過vs自帶的Nuget包管理器來搜索下載,直接搜索“NLog”: 註意,除了要安裝第一個之外,一定要安裝“NLog.Config”,否則無法在項目中正常使用NLog的配置文件。 二。配置NLog。 1.打開NLog.config文件,在<targets>標簽內加入對應的日 ...
  • 本文博主將從零開始,一步一步的告訴大家如何在前端用bootstrap Table插件展示一個表格 首先,要下載bootstrap Table插件所必須的js,地址:https://github.com/wenzhixin/bootstrap-table 官方文檔地址:http://bootstrap ...
  • 密碼強度有4個狀態,分別如下圖。 無密碼狀態 密碼低級狀態 密碼中級狀態 密碼高級狀態 實現的代碼主要如下: HTML代碼 <input name="password" type="PassWord" onKeyUp="CheckIntensity(this.value)"><table borde ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...