Ir para conteúdo
  • Cadastre-se

dev botao

Gravar Bytes De Uma Imagem (Jpg,bmp) Em Arquivo Texto Re Recuperá-La


Ver Solução Respondido por Carlos Tre,
  • Este tópico foi criado há 3359 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Galera, eu preciso pegar os dados binários de um TImage e gravar em um arquivo texto e depois recuperá-lo para dentro do TImage. Pergunta: É possível fazer isso em Delphi? Alguém teria um exemplo? Obrigado.

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Tente com o demo em anexo.

Project1.zip

  • Curtir 1

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Cara, valeu ai pela força mas não deu certo pelos seguintes motivos:

1-O exemplo que vc me mandou compila mas... quando eu executo, ele abre e já fecha.

2-Tentei fazer um projeto (Delphi 2007) copiando o seu código fonte mas quando clico em ToStr, ele simplesmente não monta a String.

 

To te mandando o projeto em anexo, se puder dar uma olhada, fico grato.

Teste.rar

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Olha o código, mude ImageList por TImage, te dei um exemplo, mas terá que estudar e mudar para o que precisa, funcionar funciona.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Obrigado Isaque, deu certo. Agora faço outra pergunta, se puder me responder, também fico grato. Seguinte: Eu gostaria de gravar os bytes gerados em um campo de banco de dados Firebird 2.5. Perguntas:

1-É possível gravar, uma vez que o tamanho da String fica enorme.

2-Se possível, que tipo de campo eu usaria no banco? Já tentei com Blob Binary e Blob Text e nenhum dos dois deu certo. Da uma mensagem: token size exceeds limit.

 

Grande abraço meu caro.

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Olá Daniel,

 

Me permita a curiosidade, por que precisa gravar em arquivo texto, e não em um arquivo de dados regular?

 

Cordialmente,

Carlos

Olá Carlos, seguinte: Eu desenvolvi um framework que pode ser usado tanto para bancos Firebird quanto para PostGree. Nesse fmk eu tenho uma classe responsável por montar os comandos SQL baseados na RTTI da classe de persistência porém, ele monta os comandos com o format: Ex.: ComandoInsert := format('INSERT INTO TABELA(CAMPO1,CAMPO2) VALUES (%d,%s)',[AField[Loop].Value,AField[Loop].Value]);

Hoje, se for pra mim mudar isso, vai ser muita mão de obra e vou descaracterizar em muito meu fmk que ja esta funcionando a mais de 1 ano 100%. Só que me surgiu a necessidade de gravar imagens no banco de dados dai, como dá pra transformar uma imagem em Bytes na forma de Texto, pensei que pudesse gravar esse texto no banco e depois recuperar o mesmo mas agora já estou chegando a conclusão que o firebird não vai suportar um campo deste tamanho. Alguma sugestão?

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Olá Daniel,

 

Desconheço o PostGreSQL, mas ainda ontem vi um comentário que pode ser a solução para o seu caso. O tipo de campo mais adequado para salvar uma imagem em Firebird certamente é o Blob binário, sem dúvida. Não consigo determinar de imediato o impacto que teria em uma string a presença de bytes com valor $00 nas chamadas à API do Firebird, escrito em C++, que usa $00 como terminador de strings

 

Não sei o impacto que parametrizar o insert/update teria no seu framework, mas acho que vale a pena considerar a sugestão do Martijn Tonies, pois talvez a única opção viável seja readequa-lo à esta nova exigência.

 

Eis o resumo da ópera, veja se, mutatis mutandis, lhe ajuda.

Hi Craig,


QuoteI have been using "LoadFromFile" in my Delphi apps to load a pdf file into
my Firebird databases. However, I need to replicate this using an update
query.
The code below was my first attempt. Using IBOjects within Delphi
qryUpdateManifestBLOB.SQL.Clear;
qryUpdateManifestBLOB.SQL.Add('UPDATE');
qryUpdateManifestBLOB.SQL.Add('w_shipments');
qryUpdateManifestBLOB.SQL.Add('SET');
qryUpdateManifestBLOB.SQL.Add('w_shipments.US_manifest_doc =');
qryUpdateManifestBLOB.SQL.Add('LoadFromFile');Well, this obviously won't work, because whatever is in the .SQL property,
is executed by the Firebird database engine. And that engine cannot execute
Delphi code.

Use a parameter:
SQL.Add('SET myblobcol = :newblob');

and of course the primary key stuff.

Call:
qryUpdateManifestBLOB.Prepare;
qryUpdateManifestBLOB.ParamByName('newblob').LoadFromFile
qryUpdateManifestBLOB.ExecSQL;

Quotewhich Firebird did not like because "LoadToFile" is an unknown function.See above.


With regards,

Martijn Tonies
Upscene Productions
http://www.upscene.com

Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!



------------------------------------
Posted by: "Martijn Tonies (Upscene Productions)" <[email protected]>
------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Visit http://www.firebirdsql.org and click the Documentation item
on the main (top) menu. Try FAQ and other links from the left-side menu there.

Also search the knowledgebases at http://www.ibphoenix.com/resources/documents/

Cordialmente,

Carlos

 

Link para o comentário
Compartilhar em outros sites

Obrigado pela dica Carlos mas... isso pra mim seria inviável, uma vez que minha classe de persistência é abstrata e eu não escrevo comandos SQL diretamente, tampouco uso ParamByName. 

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

  • Consultores

Então você vai precisar adicionar algum jeito de carregar os arquivos blob na sua classe de persistência.

Você não vai conseguir carregar arquivos grandes usando um simples "SQL insert values" como se fosse o campo fosse um VARCHAR. É uma limitação do Firebird 2.5 como pode ser visto no tracker do próprio Firebird aqui.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Daniel, o que pode tentar fazer é criar um tabela nela add uma chave primária/secundária, e outro do tipo varchar(1000) "ex" vai add registros quanto for preciso até que acabe os caracteres da imagem.

 

Quando precisar busque o registro pela chave primária e concatene todos os registros dele, para ter a imagem novamente.

 

Nota: É uma ideia, eu não tenho isso funcionando.

  • Curtir 1

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Daniel, 

 

Também trabalho com imagens em bytes na forma de texto dentro do banco de dados. E coincidentemente ustilizando  Firebird 2.5 e PostgreSQL 9.1. A solução que eu encontrei pra isso foi utilizar campos TEXT no postgre e BLOB SUBTYPE TEXT para o firebird. Nos dois casos dois bancos eu trato as imagens normalmente, como se fosse um campo string.

 

A única diferença é que eu uso Lazarus e não Delphi. No Lazarus eu utilizo as funções LSBase64ToPicture para converter de texto para imagem na apresentação, e LSPictureToBase64 para converter a imagem em String. Estas funções estão na suite de componentes LazSolutions, desenvolvidas pelo Silvio Clécio. 

 

Como não estou trabalhando com imagens no Delphi (ainda) não sei te dizer se existe uma suite equivalente para o mesmo.

 

Agora quanto à armazenagem no banco de dados, posso te garantir que fica perfeita. E Acrescento, vale para postgre, Firebird, SQLite, MySQL e SQLServer. Testei em todos eles.

Link para o comentário
Compartilhar em outros sites

Daniel, 

 

Também trabalho com imagens em bytes na forma de texto dentro do banco de dados. E coincidentemente ustilizando  Firebird 2.5 e PostgreSQL 9.1. A solução que eu encontrei pra isso foi utilizar campos TEXT no postgre e BLOB SUBTYPE TEXT para o firebird. Nos dois casos dois bancos eu trato as imagens normalmente, como se fosse um campo string.

 

A única diferença é que eu uso Lazarus e não Delphi. No Lazarus eu utilizo as funções LSBase64ToPicture para converter de texto para imagem na apresentação, e LSPictureToBase64 para converter a imagem em String. Estas funções estão na suite de componentes LazSolutions, desenvolvidas pelo Silvio Clécio. 

 

Como não estou trabalhando com imagens no Delphi (ainda) não sei te dizer se existe uma suite equivalente para o mesmo.

 

Agora quanto à armazenagem no banco de dados, posso te garantir que fica perfeita. E Acrescento, vale para postgre, Firebird, SQLite, MySQL e SQLServer. Testei em todos eles.

Cara, não teria como você me mandar o código fonte dessas duas funções? Manda no [email protected] . Grato.

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Cara, não teria como você me mandar o código fonte dessas duas funções? Manda no [email protected] . Grato.

 

Como te falei, estas funções foram desenvolvidas pelo Silvio Clécio para o componente LazSolutions. Até onde sei esse componente foi desenvolvido apenas para Lazarus, mas se você tiver tempo e paciência para testar no Delphi, pode baixá-lo diretamente no repositório Github do Silvio:

 

https://github.com/silvioprog/lazsolutions

 

Espero que te ajude.

 

Um abraço.

Link para o comentário
Compartilhar em outros sites

Trabalhei com essas conversões em um projeto, que infelizmente não tenho em mãos mais, visto que mudei de empresa, mas em suma usei os componentes TIdEncoderMIME e TIdDecoderMIME, no delphi xe5, a única diferença estava no banco que lá usava mysql, mas como o colega contribuiu pelo que vi, hj trabalhando com firebird o blob subtype text provavelmente te atenderá

 

Abraço!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3359 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...