Ir para conteúdo
Fórum Script Brasil
  • 0

Imagem para base64 interpretada por aplicativo .net


Eric Jhon

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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!

Editado por Eric Jhon
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...