从SQL Server保存PNG图片作为BMP/JPG



我在SQL Server中有一个PNG图片,我成功获取图像并将其保存到文件。

rs.Open "Select pic from Table", connObj, adOpenDynamic, adLockOptimistic
If rs.RecordCount > 0 Then
    If Not IsNull(rs.Fields("pic").Value) Then
        Set mstream = New ADODB.Stream
        mstream.Type = adTypeBinary
        mstream.Open
        mstream.Write rs.Fields("pic").Value
        mstream.SaveToFile App.Path & "MyPhoto.jpg", adSaveCreateOverWrite
    End If
End If
rs.Close

您可以看到,我已经将我的扩展名为.jpg,但我认为这并不重要,当我使用LoadPicture()中使用VB6应用程序中的图像时,我会遇到Invalid Picture错误。如果我打开图像并将其重新保存为JPG或BMP,则LoadPicture()可以工作。

那么,如何正确保存图片为BMP/JPG?

您可能会发现这两个功能有用

Private Function LoadPictureFromBlob(baData() As Byte) As StdPicture
    With CreateObject("WIA.Vector")
        .BinaryData = baData
        Set LoadPictureFromBlob = .Picture
    End With
End Function
Private Sub SavePictureToJpg(oPic As StdPicture, sFile As String, Optional ByVal Quality = 80)
    Const wiaFormatJPEG As String = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
    Dim oImg            As Object
    SavePicture oPic, sFile
    Set oImg = CreateObject("WIA.ImageFile")
    oImg.LoadFile sFile
    With CreateObject("WIA.ImageProcess")
        .Filters.Add .FilterInfos("Convert").FilterID
        .Filters.Item(1).Properties("FormatID").Value = wiaFormatJPEG
        .Filters.Item(1).Properties("Quality").Value = Quality
        Set oImg = .Apply(oImg)
    End With
    On Error Resume Next
    Kill sFile
    On Error GoTo 0
    oImg.SaveFile sFile
End Sub

只需使用Set oPic = LoadPictureFromBlob(rs.Fields("pic").Value)读取.png,然后使用内置的SavePicture oPic, App.Path & "MyPhoto.bmp"保存到.bmpSavePictureToJpg oPic, App.Path & "MyPhoto.jpg"用于.jpg并决定可选质量参数。

最新更新