2012-04-20 4 views
0

Я пишу небольшой проект для синтаксического анализа файла 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 =

+0

Некоторые примечания: учитывая, что это CSS и может иметь избыточность, я бы создал «список кеша» преобразованных изображений и, если возможно, сохранил туда и обратно. Кроме того, вы, вероятно, захотите использовать «.StartsWith (« https »)» или, еще лучше, использовать объект «Uri» и проверить, является ли он действительным URL-адресом, прежде чем передать его в «WebClient» –

+0

Теперь, создав «кешированный список». Еще одна проблема. Я делаю List (из ImageEncodingTyping), чьи свойства OriginalFilePath как String, EncodedString As String, и это все еще происходит. Список заполняется, но каждый экземпляр EncodedString - это значение, которое я разместил выше, хотя OriginalFilePath отображает правильные (все разные) образы. – Kevin

ответ

0

Я удалил строку заголовка User-Agent, и проблема исчезла.

0

в base64 строка вы вывесили является допустимым 24x24 пикселей полностью прозрачный файл PNG. Ваш код base64, похоже, работает, но файлы, которые вы конвертируете, вероятно, не те, которые вы хотите преобразовать.

+0

Каждый файл, который получает это значение, является действительным и является правильными файлами. – Kevin

+0

Я также проверил каждый файл, выполнив _wc.DownLoadFile (_File, «mypath»), поставив точку останова и проверив файл, который будет написан. Каждое написанное изображение, именно то, что они должны быть. – Kevin

+0

Извините, тогда я не знаю ответа. – Yogu

Смежные вопросы