vba实现图片与base64编码的转换

1、填写引用和自定义类型,如下:

Type GUID

    Data1 As Long

    Data2 As Integer

    Data3 As Integer

    Data4(7) As Byte

End Type

Private Declare Function CreateStreamOnHGlobal Lib "ole32.dll" (ByRef hGlobal As Any, ByVal fDeleteOnResume As Long, ByRef ppstr As Any) As Long

Private Declare Function OleLoadPicture Lib "olepro32.dll" (ByVal lpStream As IUnknown, ByVal lSize As Long, ByVal fRunMode As Long, ByRef riid As GUID, ByRef lplpObj As Any) As Long

Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As Long, ByRef pclsid As GUID) As Long

Private Const SIPICTURE As String = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"

2、编写将Base64转为数组的函数,如下:

Public Function decodeBase64(ByVal strData As String) As Byte()

'引入Microsoft XML,V6.0

    Dim objXML As MSXML2.DOMDocument

    Dim objNode As MSXML2.IXMLDOMElement

    Set objXML = New MSXML2.DOMDocument

    Set objNode = objXML.createElement("b64")

    objNode.dataType = "bin.base64"

    objNode.Text = strData

    decodeBase64 = objNode.nodeTypedValue

    Set objNode = Nothing

    Set objXML = Nothing

End Function

3、编写加将数组转为Ipicture的函数,如下:

Public Function PictureFromArray(ByRef b() As Byte) As IPicture

    On Error GoTo errorhandler

    Dim istrm As IUnknown

    Dim tGuid As GUID

    If Not CreateStreamOnHGlobal(b(LBound(b)), False, istrm) Then

        CLSIDFromString StrPtr(SIPICTURE), tGuid

        OleLoadPicture istrm, UBound(b) - LBound(b) + 1, False, tGuid, PictureFromArray

    End If

    Set istrm = Nothing

    Exit Function

errorhandler:

    Debug.Print "Could not convert to IPicture!"

End Function

4、编写将图片转为Base64编码的函数:

Public Function EncodeFile(strPicPath As String) As String

    Const adTypeBinary = 1          ' Binary file is encoded

' Variables for encoding

    Dim objXML

    Dim objDocElem

    ' Variable for reading binary picture

    Dim objStream

    ' Open data stream from picture

    Set objStream = CreateObject("ADODB.Stream")

    objStream.Type = adTypeBinary

    objStream.Open

    objStream.LoadFromFile (strPicPath)

    ' Create XML Document object and root node

    ' that will contain the data

    Set objXML = CreateObject("MSXml2.DOMDocument")

    Set objDocElem = objXML.createElement("Base64Data")

    objDocElem.dataType = "bin.base64"

    ' Set binary value

    objDocElem.nodeTypedValue = objStream.Read()

    ' Get base64 value

    EncodeFile = objDocElem.Text

    ' Clean all

    Set objXML = Nothing

    Set objDocElem = Nothing

    Set objStream = Nothing

End Function

5、窗体中添加按钮,实现将图片转为Base64编码并显示在整个文档,如下:

Private Sub CommandButton1_Click()

    With Application.FileDialog(msoFileDialogFilePicker)

        .AllowMultiSelect = False   '单选择

        .Filters.Clear   '清除文件过滤器

        .Filters.Add "Picture Files", "*.bmp;*.jpg;*.gif"

        .Filters.Add "All Files", "*.*"          '设置两个文件过滤器

        If .Show = -1 Then    'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。

            ThisDocument.Content.Text = EncodeFile(.SelectedItems(1))

        End If

    End With

End Sub

6、将Base64编码转为图片数组直接显示在图片控件中,如下:

Private Sub CommandButton2_Click()

    Dim str As String

    str = ThisDocument.Content.Text

    Image1.Picture = PictureFromArray(decodeBase64(str))

End Sub

说明:PNG格式的图片无法显示。

可交流分享经验,联系qq:329876601

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA是Visual Basic for Applications的缩写,是一种应用程序语言,主要用于在Microsoft Office软件中编写宏。如果您想将图片转换base64字符串,可以通过以下步骤实现: 1. 打开您想要将图片转换base64字符串的Excel文档。 2. 按下“Alt”和“F11”键,打开Visual Basic编辑器。 3. 在编辑器中选择“插入”>“模块”,创建一个新的VBA模块。 4. 在新模块中输入以下代码: ``` Function Base64EncodeImage(ImagePath As String) As String Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") Dim imageFile As Object Set imageFile = fs.GetFile(ImagePath) Dim imageData() As Byte ReDim imageData(imageFile.Size - 1) Dim fileStream As Object Set fileStream = imageFile.OpenAsTextStream(1, False) fileStream.Read imageData Base64EncodeImage = "data:image/png;base64," + Base64Encode(imageData) End Function Function Base64Encode(ByVal inData As Byte) As String 'Convert a byte array to base64 string Const Base64 As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" Dim outData() As Byte ReDim outData((UBound(inData) \ 3) * 4 + 3) Dim byteCount As Long byteCount = 0 Dim i As Long For i = LBound(inData) To UBound(inData) Step 3 outData(byteCount) = Asc(Mid(Base64, (inData(i) \ 4) + 1, 1)) outData(byteCount + 1) = Asc(Mid(Base64, ((inData(i) And 3) * 16) + (inData(i + 1) \ 16) + 1, 1)) If i + 1 <= UBound(inData) Then outData(byteCount + 2) = Asc(Mid(Base64, ((inData(i + 1) And 15) * 4) + (inData(i + 2) \ 64) + 1, 1)) Else outData(byteCount + 2) = Asc("=") End If If i + 2 <= UBound(inData) Then outData(byteCount + 3) = Asc(Mid(Base64, (inData(i + 2) And 63) + 1, 1)) Else outData(byteCount + 3) = Asc("=") End If byteCount = byteCount + 4 Next i Base64Encode = Replace(StrConv(outData, vbUnicode), Chr(0), "") End Function ``` 5. 点击“文件”>“保存”,将模块保存为一个新的文件。 6. 在Excel文档中插入一个图片。 7. 在Excel文档中添加一个新的单元格。 8. 在新单元格中输入以下公式: ``` =Base64EncodeImage("图片路径") ``` 其中,“图片路径”是您想要转换图片的完整路径。例如,如果您的图片在C:\Images\example.png,那么公式应该是: ``` =Base64EncodeImage("C:\Images\example.png") ``` 9. 按下“Enter”键,在新单元格中显示转换后的base64字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值