天天看點

C#網絡圖檔處理類

C# 從網絡抓取圖檔處理類,涉及到圖檔 和 Base64的互相轉換以及Base64 轉 圖檔的儲存,友善後期查漏補缺。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
    /// <summary>
    /// 網絡圖檔服務類
    /// </summary>
    internal class WebImageHelper
    {
        /// <summary>
        /// 下載下傳Web網頁的圖檔,并轉換為Base64String格式
        /// </summary>
        /// <param name="urlAddress">圖檔URL位址</param>
        /// <returns></returns>
        public string WebImageToBase64(string urlAddress)
        {
            try
            {
                return ImageToBase64(urlAddress);
            }
            catch (Exception ex)
            {
                return string.Empty;
            }
        }


        /// <summary>
        /// Image 轉成 base64
        /// </summary>
        /// <param name="fileFullName"></param>
        private string ImageToBase64(string fileFullName)
        {
            try
            {
                Image img = UrlToImage(fileFullName);
                Bitmap bmp = new Bitmap(img);
                MemoryStream ms = new MemoryStream();
                var suffix = fileFullName.Substring(fileFullName.LastIndexOf('.') + 1,
                    fileFullName.Length - fileFullName.LastIndexOf('.') - 1).ToLower();
                var suffixName = suffix == "png"
                    ? ImageFormat.Png
                    : suffix == "jpg" || suffix == "jpeg"
                        ? ImageFormat.Jpeg
                        : suffix == "bmp"
                            ? ImageFormat.Bmp
                            : suffix == "gif"
                                ? ImageFormat.Gif
                                : ImageFormat.Jpeg;

                bmp.Save(ms, suffixName);
                byte[] arr = new byte[ms.Length]; ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length); ms.Close();
                string base64Str = Convert.ToBase64String(arr);
                return PrefectBase64(base64Str);
            }
            catch (Exception ex)
            {
                return null;
            }

        }

        private static Image UrlToImage(string url)
        {
            WebClient mywebclient = new WebClient();
            byte[] Bytes = mywebclient.DownloadData(url);
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                Image outputImg = Image.FromStream(ms);
                return outputImg;
            }
        }

        // 處理base64字元
        private static string PrefectBase64(string Base64Str)
        {
            string dummyData = Base64Str.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("_", "/").Replace("-", "+");
            if (dummyData.Length % 4 > 0)
            {
                dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
            }
            return dummyData;
        }


        #region 儲存base64格式圖檔
        public static void SavePhotoByString(string base64, string fullPath)
        {
            byte[] buffer = Convert.FromBase64String(base64.Replace(" ", "+"));        //儲存到指定路徑
            FileStream fileStream = new FileStream(fullPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
            {
                Position = 0L
            };
            fileStream.Write(buffer, 0, buffer.Length);
            fileStream.Close();
        }
        #endregion


        /// <summary>
        /// 檔案轉base64編碼
        /// </summary>
        /// <param name="FileName">檔案路徑+檔案名</param>
        /// <returns>Base64字元串</returns>
        public string FileJpgConvertToBase64(string FileName)
        {
            if (!File.Exists(FileName))
            {
                return "";
            }
            string Pub_Zp = "";
            try
            {
                FileStream fs = File.OpenRead(FileName);
                int i = (int)fs.Length;
                byte[] Zp = new byte[i];
                fs.Read(Zp, 0, i);
                fs.Close();
                Pub_Zp = Convert.ToBase64String(Zp);
            }
            catch (Exception ex)
            {
                Console.WriteLine("JpgConvertToBase64", FileName, ex);
                return "";
            }
            return Pub_Zp;
        }

        #region[base64轉圖檔]
        /// <summary>
        /// 解析照片
        /// </summary>
        /// <param name="base64string">照片base64String類型</param>
        /// <returns></returns>
        private Bitmap GetImageFromBase64(string base64string)
        {
            Bitmap bitmap = null;
            try
            {
                if (!string.IsNullOrEmpty(base64string))
                {
                    byte[] b = Convert.FromBase64String(base64string);
                    MemoryStream ms = new MemoryStream(b);
                    bitmap = new Bitmap(ms);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("GetImageFromBase64", ex);
            }
            return bitmap;
        }
        #endregion
    }
}

           

繼續閱讀