Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кодирование JPG методом ENCODEBASE64
 
 автор: Alex   (23.10.2013 в 12:41)   личное сообщение
 
 

Реально сделать в аксе?

Из изображения должно получится нечто такое:

PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
 CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBw kIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKC gr/
 2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgo KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKC
 goKCgoKCgoKCgoKCgr/wAARCABgAGADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAA
 ECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR BRIhMUEGE1FhByJxFDKBkaE

только очень длинное

  Ответить  
 
 автор: osmor   (24.10.2013 в 12:12)   личное сообщение
 
 


Function EncodeBase64(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)      

  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.nodeTypedValue = arrData
  EncodeBase64 = objNode.Text 

  Set objNode = Nothing
  Set objXML = Nothing
End Function


так попробуйте

  Ответить  
 
 автор: Alex   (28.10.2013 в 11:29)   личное сообщение
 
 

Ругается на Dim objXML As MSXML2.DOMDocument , говорит: User-defined type not defined
Даже закрыть приложение невозможно - только через диспетчер задач.
Я так понял, эта функция будет кодировать строку ( EncodeBase64(text As String) As String ), а мне нужно файл JPG кодировать ...

  Ответить  
 
 автор: osmor   (28.10.2013 в 11:41)   личное сообщение
 
 

Подключите в references библиотеку Microsoft XML

  Ответить  
 
 автор: Alex   (28.10.2013 в 12:02)   личное сообщение
 
 

Угу Ступил
Строку кодирует вроде бы:
Поле1 Выражение1
абв = 4OHi
где = 4+Tl
А как файлик JPG заплющить?

  Ответить  
 
 автор: osmor   (28.10.2013 в 12:53)   личное сообщение
 
 

считать его в переменную.

  Ответить  
 
 автор: Alex   (28.10.2013 в 12:56)   личное сообщение
 
 

А как!? Олег! Помогите ламеру, плз :)

  Ответить  
 
 автор: osmor   (28.10.2013 в 14:04)   личное сообщение
 
 

уже забыл все, возможно как-то так


Dim intNF As Integer
Dim bytB() As Byte
intNF = FreeFile
    Open "c:/Файл.jpg" For Binary Access Read As #intNF
        ReDim bytB(FileLen(strFullFileName))
        Get #intNF, , bytB
        Close #intNF
Byte - 

  Ответить  
 
 автор: Alex   (28.10.2013 в 15:21)   личное сообщение
14 Кб.
 
 

Что-то совсем запутался и ничего не получается...
Есть таблица с полями: ХранитьКак (имя абонента), Контакт (телефон), Image (genm к файлу с фоткой JPG)
Нужно чтобы по нажатию кнопочки формировался текстовый файл такого содержания:

BEGIN:VCARD 
VERSION:2.1 
N;ХранитьКак 
FN;ХранитьКак  
TEL;CELL:Контакт 
TEL;HOME: 
TEL;WORK: 
TEL;FAX: 
PHOTO;ENCODING=BASE64;JPEG: < Закодированная фотка, находящаяся по пути Image >
END:VCARD

Для каждой записи в таблице - свой такой блок
Наваял во:

Function EncodeBase64(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)

  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.nodeTypedValue = arrData
  EncodeBase64 = objNode.text

  Set objNode = Nothing
  Set objXML = Nothing
End Function


Function VcfList()

Dim intNF As Integer
Dim bytB() As Byte
'Dim strFullFileName As String
Dim rs As DAO.Recordset
Dim fso As Object
Dim TextStream As Object
Dim i As Integer

Set rs = CurrentDb.OpenRecordset("&#231;&#224;&#239;VCF")
rs.MoveLast: rs.MoveFirst
Set fso = CreateObject("Scripting.FileSystemObject")
Set TextStream = fso.CreateTextFile(CurrentProject.Path & "\List.vcf")
For i = 1 To rs.RecordCount
TextStream.WriteLine "BEGIN:VCARD"
TextStream.WriteLine "VERSION:2.1"
TextStream.WriteLine "N;" & rs.Fields("ХранитьКак")
TextStream.WriteLine "FN;" & rs.Fields("ХранитьКак")
TextStream.WriteLine "TEL;CELL:" & rs.Fields("Контакт")
TextStream.WriteLine "TEL;HOME:"
TextStream.WriteLine "TEL;WORK:"
TextStream.WriteLine "TEL;FAX:"

intNF = FreeFile
    Open ("Image") For Binary Access Read As #intNF
        ReDim bytB(FileLen("Image"))
        Get #intNF, , bytB
        Close #intNF

TextStream.WriteLine "PHOTO;ENCODING=BASE64;JPEG:" & EncodeBase64(bytB)

TextStream.WriteLine "END:VCARD"
TextStream.WriteBlankLines 2
If i < rs.RecordCount Then rs.MoveNext
Next i
TextStream.Close
Set TextStream = Nothing
Set fso = Nothing
Set rs = Nothing

MsgBox "Готово!"

End Function



Ниработаит :(

  Ответить  
 
 автор: osmor   (28.10.2013 в 15:37)   личное сообщение
 
 

Open ("Image") - это кто?
как не работает? что говорит?

  Ответить  
 
 автор: Alex   (28.10.2013 в 17:41)   личное сообщение
 
 

Open ("Image") - Image поле таблицы, в котором прописан путь к файлу JPG

Ругается вот так: ByRef argument type mismatch
на: bytB
в строке: TextStream.WriteLine "PHOTO;ENCODING=BASE64;JPEG:" & EncodeBase64(bytB)

  Ответить  
 
 автор: osmor   (29.10.2013 в 16:10)   личное сообщение
 
 

Ну обращение к полю таблицы не корректно.
и нужно массив перед передачей преобразовать в строку. Перебором элементов и соединением их между собой "&"

  Ответить  
 
 автор: Alex   (30.10.2013 в 13:49)   личное сообщение
 
 

А как обратиться правильно? По уставу :)
Перебором элементов ниасилил, сделал так:
TextStream.WriteLine "PHOTO;ENCODING=BASE64;JPEG:" & EncodeBase64(StrConv(bytB, 64))

Ничего не ругается, файл создается, но получается:
PHOTO;ENCODING=BASE64;JPEG:

и все... Явно не то :(

  Ответить  
 
 автор: osmor   (31.10.2013 в 10:39)   личное сообщение
 
 

поскольку я не знаю что там у вас как, то сказать как "правильно" обратиться к полю в котором хранится путь к картинке, я не могу.
Для начала, замените
Open ("Image") ...... на
Open("Здесь Реальный путь к реальной картинке") ....
Например:
Open("C:\image1.jpg") ....

и посмотрите что получится

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList