1 #Region "Microsoft.VisualBasic::a3e29c4c9a353ba410134637bb269f37, Microsoft.VisualBasic.Core\Extensions\WebServices\Http\Base64Codec.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module Base64Codec
35     
36     '         Function: __getImageFromBase64, __toBase64String, GetImage, (+3 OverloadsToBase64String, (+2 OverloadsToStream
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Drawing
44 Imports System.Drawing.Imaging
45 Imports System.IO
46 Imports System.Runtime.CompilerServices
47 Imports Microsoft.VisualBasic.Imaging
48 Imports Microsoft.VisualBasic.Language
49
50 Namespace Net.Http
51
52     ''' <summary>
53     ''' Tools API for encoded the image into a base64 string.
54     ''' </summary>
55     Public Module Base64Codec
56
57         <MethodImpl(MethodImplOptions.AggressiveInlining)>
58         <Extension>
59         Public Function ToBase64String(byts As IEnumerable(Of Byte)) As String
60             Return Convert.ToBase64String(byts.ToArray)
61         End Function
62
63         ''' <summary>
64         ''' Function to Get Image from Base64 Encoded String
65         ''' </summary>
66         ''' <param name="Base64String"></param>
67         ''' <param name="format"></param>
68         ''' <returns></returns>
69         <Extension> Public Function GetImage(Base64String As StringOptional format As ImageFormats = ImageFormats.Png) As Bitmap
70             Try
71                 If String.IsNullOrEmpty(Base64String) Then
72                     ' Checking The Base64 string validity
73                     Return Nothing
74                 Else
75                     Return Base64String.__getImageFromBase64(GetFormat(format))
76                 End If
77             Catch ex As Exception
78                 Call ex.PrintException
79                 Return Nothing
80             End Try
81         End Function
82
83         ''' <summary>
84         ''' Function to Get Image from Base64 Encoded String
85         ''' </summary>
86         ''' <param name="base64String"></param>
87         ''' <param name="format"></param>
88         ''' <returns></returns>
89         ''' 
90         <Extension>
91         Private Function __getImageFromBase64(base64String$, format As ImageFormat) As Bitmap
92             Dim bytData As Byte(), streamImage As Bitmap
93
94             ' Convert Base64 to Byte Array
95             bytData = Convert.FromBase64String(base64String)
96
97             Using Memory stream to save image
98             Using ms As New MemoryStream(bytData)
99                 ' Converting image from Memory stream
100                 streamImage = Image.FromStream(ms)
101             End Using
102
103             Return streamImage
104         End Function
105
106         ''' <summary>
107         ''' Convert the Image from Input to Base64 Encoded String
108         ''' </summary>
109         ''' <param name="ImageInput"></param>
110         ''' <returns></returns>
111         <Extension> Public Function ToBase64String(ImageInput As Image, Optional format As ImageFormats = ImageFormats.Png) As String
112             Try
113                 Return __toBase64String(ImageInput, GetFormat(format))
114             Catch ex As Exception
115                 Call ex.PrintException
116                 Return ""
117             End Try
118         End Function
119
120         ''' <summary>
121         ''' Convert the Image from Input to Base64 Encoded String
122         ''' </summary>
123         ''' <returns></returns>
124         ''' 
125         <MethodImpl(MethodImplOptions.AggressiveInlining)>
126         <Extension> Public Function ToBase64String(bmp As Bitmap, Optional format As ImageFormats = ImageFormats.Png) As String
127             Return ToBase64String(ImageInput:=bmp, format:=format)
128         End Function
129
130         <MethodImpl(MethodImplOptions.AggressiveInlining)>
131         <Extension>
132         Public Function ToStream(image As Image, Optional format As ImageFormats = ImageFormats.Png) As MemoryStream
133             Return image.ToStream(format.GetFormat)
134         End Function
135
136         <Extension>
137         Public Function ToStream(image As Image, format As ImageFormat) As MemoryStream
138             With New MemoryStream
139                 Call image.Save(.ByRef, format)
140                 Call .Flush()
141                 Call .Seek(Scan0, SeekOrigin.Begin)
142                 Return .ByRef
143             End With
144         End Function
145
146         <MethodImpl(MethodImplOptions.AggressiveInlining)>
147         Private Function __toBase64String(image As Image, format As ImageFormat) As String
148             Return Convert.ToBase64String(image.ToStream(format).ToArray)
149         End Function
150     End Module
151 End Namespace