Jump to content
Fórum Script Brasil
  • 0

Imagem para base64 interpretada por aplicativo .net


Eric Jhon
 Share

Question

Boa tarde!

Estou desenvolvendo uma aplicação em vb.net que recebe informações de um programa chamado Blender 3D o qual é escrito em Python e gera imagens em 3 dimensões. Eu gostaria de saber se alguém poderia me dar uma luz de como eu posso converter uma imagem gerada no Blender em uma string base64 para enviar ao meu aplicativo .net.

Em outras palavras: como converter imagem em string base64 de modo que o vb.net decodifique as informações recebidas?

Abaixo a função que estou usando para decodificar as imagens:

'Converte uma string Base64 de volta para uma imagem
    Public Function Base64StringToImage(ByVal strBase64 As String) As Image
        If strBase64 <> "" Then
            'String Base64
            Dim ms As MemoryStream = New MemoryStream(Convert.FromBase64String(strBase64))
            'Criar um novo Bitmap baseado na MemoryStream
            Dim bmp As Bitmap = New Bitmap(ms)
            'Retorna o Bitmap criado
            Return bmp
        Else
            Return Nothing
        End If
    End Function
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Não conheço o Blender, mas a sua função funciona corretamente. Gerei um arquivo com a string em Base64 e atráves da sua função foi possível decodificar e abrir a imagem corretamente. Mas isso, é claro, para um arquivo comum como um PNG ou JPG. Em qual formato conhecido seria gerado esse arquivo do Blender?

Usei Python para gerar um arquivo texto com o conteúdo em Base64, a partir de uma imagem PNG:

import base64

arq = "c:/pasta/arquivo.png"

f = open(arq, 'rb')
chunk = f.read()
f.close()

chunkb64 = base64.b64encode(chunk)
f = open(arq.replace(".png", ".txt"), 'w')
f.write(chunkb64)
f.close()

E depois usei o VB.net para decodificar com a sua função:

Dim arquivo As String = "c:\pasta\arquivo.txt"
Dim sr As New IO.StreamReader(arquivo)

Dim b64 As String = sr.ReadToEnd()

sr.Close()

Dim bmp As Bitmap = Base64StringToImage(b64)

pb.Image = bmp

Onde "pb" é uma PictureBox. Mas, é claro, isso só vai valer para um formato conhecido e que pode ser aberto no VB (sem a necessidade de bibliotecas externas).

Abraços!

Link to comment
Share on other sites

  • 0
Em 24/01/2017 at 20:33, Graymalkin disse:

Não conheço o Blender, mas a sua função funciona corretamente. Gerei um arquivo com a string em Base64 e atráves da sua função foi possível decodificar e abrir a imagem corretamente. Mas isso, é claro, para um arquivo comum como um PNG ou JPG. Em qual formato conhecido seria gerado esse arquivo do Blender?

Usei Python para gerar um arquivo texto com o conteúdo em Base64, a partir de uma imagem PNG:

import base64

arq = "c:/pasta/arquivo.png"

f = open(arq, 'rb')
chunk = f.read()
f.close()

chunkb64 = base64.b64encode(chunk)
f = open(arq.replace(".png", ".txt"), 'w')
f.write(chunkb64)
f.close()

E depois usei o VB.net para decodificar com a sua função:

Dim arquivo As String = "c:\pasta\arquivo.txt"
Dim sr As New IO.StreamReader(arquivo)

Dim b64 As String = sr.ReadToEnd()

sr.Close()

Dim bmp As Bitmap = Base64StringToImage(b64)

pb.Image = bmp

Onde "pb" é uma PictureBox. Mas, é claro, isso só vai valer para um formato conhecido e que pode ser aberto no VB (sem a necessidade de bibliotecas externas).

Abraços!

Muito obrigado pelo retorno!

O Blender gera imagem em diversos formatos conhecidos, png, jpg, bmp, etc...

Quanto a tua função em Python ela me retorna o seguinte erro na linha 11:

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
TypeError: must be str, not bytes

A versão do Python que estou usando é a 3.4.2

Se eu utilizar a função str() na linha 11 da seguinte forma:

import base64

arq = "C:\Brasão.png"

f = open(arq, 'rb')
chunk = f.read()
f.close()

chunkb64 = base64.b64encode(chunk)
f = open(arq.replace(".png", ".txt"), 'w')
f.write(str(chunkb64))
f.close()

o arquivo Brasão.txt é gerado sem retornar nenhum erro. Porém quando vou tentar decodificar o arquivo usando o Visual Basic 2015 ele me retorna o seguinte erro:

"A entrada não é uma cadeia de caracteres de Base 64 válida, pois contém um caractere que não é de base 64, mais de dois caracteres de preenchimento ou um caractere ilegal entre os caracteres de preenchimento. "

Onde poderia estar o problema?

 

Conseguir resolver o problema utilizando a tua função em Python. Eu só precisava tirar os caracteres "b'" do início da string base64 e a "'" (aspas simples) do final.

Muito obrigado pela ajuda!

14 minutos atrás, Eric Jhon disse:

Muito obrigado pelo retorno!

O Blender gera imagem em diversos formatos conhecidos, png, jpg, bmp, etc...

Quanto a tua função em Python ela me retorna o seguinte erro na linha 11:

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
TypeError: must be str, not bytes

A versão do Python que estou usando é a 3.4.2

Se eu utilizar a função str() na linha 11 da seguinte forma:

import base64

arq = "C:\Brasão.png"

f = open(arq, 'rb')
chunk = f.read()
f.close()

chunkb64 = base64.b64encode(chunk)
f = open(arq.replace(".png", ".txt"), 'w')
f.write(str(chunkb64))
f.close()

o arquivo Brasão.txt é gerado sem retornar nenhum erro. Porém quando vou tentar decodificar o arquivo usando o Visual Basic 2015 ele me retorna o seguinte erro:

"A entrada não é uma cadeia de caracteres de Base 64 válida, pois contém um caractere que não é de base 64, mais de dois caracteres de preenchimento ou um caractere ilegal entre os caracteres de preenchimento. "

Onde poderia estar o problema?

 

Conseguir resolver o problema utilizando a tua função em Python. Eu só precisava tirar os caracteres "b'" do início da string base64 e a "'" (aspas simples) do final.

Muito obrigado pela ajuda!

Conseguir resolver o problema utilizando a tua função em Python. Eu só precisava tirar os caracteres "b'" do início da string base64 e a "'" (aspas simples) do final.

Muito obrigado pela ajuda!

Edited by Eric Jhon
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...