Я пишу небольшой проект для синтаксического анализа файла CSS, а base64 кодирует все фоновые изображения.Base64 Кодирование изображений в CSS
Хотя я могу правильно разобрать CSS, кажется, что каждый раз, когда я пытаюсь преобразовать файл изображения в строку base64Encoded, возвращаемая строка всегда будет одинаковой.
Что я делаю неправильно?
Вот кодер. Предположим, что все пути изображения правильно передаются методу. В этом случае все изображения являются полностью квалифицированными URL-адресами, поэтому первая часть метода - это то, что делает преобразование.
Public Sub EncodeImage(ByVal _File As String)
If _File.StartsWith("http") OrElse _File.StartsWith("https") Then
Using _wc As New WebClient()
Common.SetAllowUnsafeHeaderParsing20()
_wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13")
_wc.DownloadFile(_File, "c:\temp.png")
Dim _d As Byte() = _wc.DownloadData(_File)
ImageStrings.Add(New ImageTyping() With {
.SourceFile = _File,
.Base64String = Convert.ToBase64String(_d)
})
_d = Nothing
End Using
Else
Using _fs As New FileStream(_File, IO.FileMode.Open)
Using _br As New BinaryReader(_fs)
Dim _i As Byte() = _br.ReadBytes(_fs.Length)
ImageStrings.Add(New ImageTyping() With {
.SourceFile = _File,
.Base64String = Convert.ToBase64String(_i)
})
_i = Nothing
_br.Close()
End Using
_fs.Close()
End Using
End If
End Sub
Каждая строка, возвращенная из этого: iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAAGXcA1uAAAAKUlEQVRIx2P4 // +/DwwzUJUzoiRGNYxqGNUwGDSMWjBqwagFoxbQAAMAfS9kqktT8qQAAAAASUVORK5CYII =
Некоторые примечания: учитывая, что это CSS и может иметь избыточность, я бы создал «список кеша» преобразованных изображений и, если возможно, сохранил туда и обратно. Кроме того, вы, вероятно, захотите использовать «.StartsWith (« https »)» или, еще лучше, использовать объект «Uri» и проверить, является ли он действительным URL-адресом, прежде чем передать его в «WebClient» –
Теперь, создав «кешированный список». Еще одна проблема. Я делаю List (из ImageEncodingTyping), чьи свойства OriginalFilePath как String, EncodedString As String, и это все еще происходит. Список заполняется, но каждый экземпляр EncodedString - это значение, которое я разместил выше, хотя OriginalFilePath отображает правильные (все разные) образы. – Kevin