تبدبل عکس به رشته ۶۴ بایتی

دوشنبه 4 خرداد 1394

در این مقاله میخواهم یاد بگیریم که چگونه یک عکس را به رشته ۶۴ بیتی تبدیل کنیم رمز نگاری ۶۴ بایتی وقتی استفاده میشود که ما نیاز داریم داده ای باینری را به فرمت رشته(string) تبدیل کنیم داده های باینری به طور معمول برای استفاده تعدادی از برنامه های کاربردی مثل فرستادن ایمیل با MIME و ذخیره داده ها به صورت Xml است

تبدبل عکس به رشته ۶۴ بایتی

 

 

رمز نگاری ۶۴ بایتی  وقتی استفاده میشود که  ما نیاز داریم داده ای باینری   را به فرمت رشته(string) تبدیل کنیم داده های باینری به طور معمول برای  استفاده تعدادی از برنامه های کاربردی مثل فرستادن ایمیل با MIME و ذخیره داده ها به صورت Xml  است

در این مقاله  ابتدا یک وب سرویس ایجاد میکنیم  که ابتدا عکس را ریسایز کند سپس  ان را به رشته ۶۴ بیتی تبدیل میکنیم و سپس ان را به فرمت json تبدیل میکنیم

 بریم شروع به کد نوشتن  کنیم

 

ایتدا یک وب سرویس در ‍پروژه ایجاد میکنیم

 برای ایجاد وب سرویس مراحل زیر را انجام میدهیم

روی ‍پروژه راست کلیک کرده و گزینه       Asp.Net Server control    را انتخاب میکنیم

 

حالا قطعه کد زیر را به برنامه خود اضافه کنید(قطعه کد واردشده در صفحه Service1.svc.cs) است

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Runtime.Serialization;  
    using System.ServiceModel;  
    using System.ServiceModel.Web;  
    using System.Text;  
    using System.IO;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    namespace PhotoService   
    {  
        public class Service1: IService1   
        {  
            static string[] ImageBase64Strings;  
            static int ImageCounts;  
            static string[] base64Value;  
            DirectoryInfo di;  
            System.Drawing.Image imgThumb = null;  
            int thumbWidth = 100;  
            int thumbHeight = 100;  
            Service1() {  
                di = new DirectoryInfo(@  
                "D:\ImageFolder"); // Path of images  
                ImageCounts = di.GetFiles("*.jpg", SearchOption.TopDirectoryOnly).Length;  
                base64Value = new string[ImageCounts];  
            }  
            public string[] GetImages() //This method will return base64 strings in JSON format  
            {  
                try   
                {  
                    int i = 0;  
                    FileInfo[] finfos = di.GetFiles("*.jpg", SearchOption.TopDirectoryOnly);  
                    ImageBase64Strings = new string[ImageCounts];  
                    foreach(FileInfo fi in finfos)   
                    {  
                        using(System.Drawing.Image img = System.Drawing.Image.FromFile(fi.FullName)) {  
                            imgThumb = CreateThumbnail(img, thumbWidth, thumbHeight);  
                            using(MemoryStream m = new MemoryStream())   
                            {  
                                imgThumb.Save(m, ImageFormat.Jpeg);  
                                byte[] imageBytes = m.ToArray();  
                                ImageBase64Strings[i] = Convert.ToBase64String(imageBytes);  
                                i++;  
                            }  
                        }  
                    }  
                    return ImageBase64Strings;  
                } catch (Exception ex)   
                {  
                    throw ex;  
                }  
            }  
            private Image CreateThumbnail(Image image, int thumbWidth, int thumbHeight)  
            {  
                try   
                {  
                    return image.GetThumbnailImage(  
                    thumbWidth,  
                    thumbHeight,  
                    delegate()   
                    {  
                        return false;  
                    },  
                    IntPtr.Zero);  
                } catch (Exception ex)  
                {  
                    throw ex;  
                }  
            }  
            public Stream ToStream(Image image, ImageFormat formaw)  
            {  
                try  
                {  
                    var stream = new System.IO.MemoryStream();  
                    image.Save(stream, formaw);  
                    stream.Position = 0;  
                    return stream;  
                } catch (Exception ex)   
                {  
                    throw;  
                }  
            }  
        }  
    }  

و این قطعه کد را در صفحه IService1.cs  وارد میکنید 

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Runtime.Serialization;  
    using System.ServiceModel;  
    using System.ServiceModel.Web;  
    using System.Text;  
    using System.IO;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    namespace PhotoService  
    {  
        [ServiceContract]  
        public interface IService1   
        {  
            [OperationContract]  
            [WebGet(UriTemplate = "/GetImages", RequestFormat = WebMessageFormat.Json,  
            ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]  
            string[] GetImages();  
        }  
    }  

Web Application to consume web service

Default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
    <!DOCTYPE html>  
    <html  
        xmlns="http://www.w3.org/1999/xhtml">  
        <head runat="server">  
            <title></title>  
        </head>  
        <body>  
            <form id="form1" runat="server">  
                <div>  
                    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Get Images from Base64 strings" />  
                    <br />  
                    <asp:Repeater ID="FileRepeater" runat="server">  
                        <ItemTemplate>  
                            <asp:Image ID="Image1" runat="server" ImageUrl="  
                                <%# Container.DataItem %>" />  
                            </ItemTemplate>  
                        </asp:Repeater>  
                    </div>  
                </form>  
            </body>  
        </html>  

 

 

 

حالا یک پروژه  از نوع asp.Net  ایجاد میکنیم

در صفحه Default.aspx  

 

   قطعه کد زیر را به برنامه اضافه مکنید

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
    <!DOCTYPE html>  
    <html  
        xmlns="http://www.w3.org/1999/xhtml">  
        <head runat="server">  
            <title></title>  
        </head>  
        <body>  
            <form id="form1" runat="server">  
                <div>  
                    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Get Images from Base64 strings" />  
                    <br />  
                    <asp:Repeater ID="FileRepeater" runat="server">  
                        <ItemTemplate>  
                            <asp:Image ID="Image1" runat="server" ImageUrl="  
                                <%# Container.DataItem %>" />  
                            </ItemTemplate>  
                        </asp:Repeater>  
                    </div>  
                </form>  
            </body>  
        </html>  

 

 

در صفحه Default.aspx  .cs     

 قطعه کد زیر را به برنامه اضافه مکنید

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  
    using System.Runtime.Serialization;  
    using System.Net;  
    using System.IO;  
    using System.Xml.Linq;  
    using System.Xml;  
    using System.Runtime.Serialization.Json;  
    public partial class _Default: System.Web.UI.Page   
    {  
        protected void Page_Load(object sender, EventArgs e) {}  
        static int count = 0;  
        protected void Button2_Click(object sender, EventArgs e)   
        {  
            try   
            {  
                HttpWebRequest request = WebRequest.Create("http://localhost:21269/Service1.svc/GetImages") as HttpWebRequest;  
                using(HttpWebResponse response = request.GetResponse() as HttpWebResponse) {  
                    if (response.StatusCode != HttpStatusCode.OK) throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription));  
                    DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(string[]));  
                    object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());  
                    string[] data = objResponse as string[];  
                    count = data.Length;  
                    System.Drawing.Image[] Converted_Image = new System.Drawing.Image[count];  
                    Converted_Image = Base64ToImage(data);  
                    for (int i = 0; i < count; i++)  
                    {  
                        string filename = Server.MapPath("~/Images/" + i + ".jpg");  
                        Converted_Image[i].Save(filename);  
                    }  
                    string[] list = Directory.GetFiles(Server.MapPath("~/Images"));  
                    var aList = from fileName in Directory.GetFiles(Server.MapPath("~/Images")) select string.Format("~/Images/{0}", Path.GetFileName(fileName));  
                    FileRepeater.DataSource = aList;  
                    FileRepeater.DataBind();  
                }  
            } catch (Exception ex)   
            {  
                Response.Write("Error : " + ex.Message);  
            }  
        }  
        public System.Drawing.Image[] Base64ToImage(string[] base64String)   
        {  
            System.Drawing.Image[] image = new System.Drawing.Image[count];  
            for (int i = 0; i < count; i++)  
            {  
                byte[] imageBytes = Convert.FromBase64String(base64String[i]);  
                MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);  
                ms.Write(imageBytes, 0, imageBytes.Length);  
                image[i] = System.Drawing.Image.FromStream(ms, true);  
            }  
            return image;  
        }  
    }

یکی دیگر از فواید این برنامه این است که  به ما امکان ا‍پلود چند عکس را به صورت همزمان میدهد

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید