![ActiveDelphi - Índice do Fórum](templates/subSilver/images/logo_phpBB.gif) |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
daniel_paixao Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sexta-Feira, 13 de Abril de 2012 Mensagens: 10 Localização: Cascavel, PR
|
Enviada: Sex Mai 22, 2015 5:37 pm Assunto: TImage pra Txt e Txt pra TImage |
|
|
Galera, seguinte, estou com um problema: Preciso salvar uma imagem em JPEG que está num TImage no meu banco de dados. Só que eu quero salvar apenas os bytes da imagem em um campo Varchar. Eu consigo transformar o JPEG de um TImage e texto e salva-lo sem problemas porem, na hora de recuperar, simplesmente não vem. Detalhe: Eu não quero salvar em campo blob, minha necessidade é outra: Eu realmente preciso salvar os bytes da imagem e deppois recupera-la. Pergunto: Isso é possível? Alguem teria um exemplo de como se faz isso? Abraco. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
leandroksc Profissional
![Profissional Profissional](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star5.gif)
Registrado: Quinta-Feira, 29 de Setembro de 2011 Mensagens: 528
|
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
daniel_paixao Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sexta-Feira, 13 de Abril de 2012 Mensagens: 10 Localização: Cascavel, PR
|
Enviada: Seg Mai 25, 2015 10:13 am Assunto: |
|
|
Meu Delphi é o 2007. Acho que não vai funcionar. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Mai 25, 2015 11:28 am Assunto: |
|
|
transforme o arquivo jpeg em um arquivo hexadecimal depois basta copiar o conteúdo e jogar no campo varchar, para exibir o conteúdo novamente precisa remontar o arquivo jpeg através do hexadecimal
no post aqui mostra como converter trabar com arquivo e hexdecimal
http://www.activedelphi.com.br/forum/viewtopic.php?t=84854 _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
daniel_paixao Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sexta-Feira, 13 de Abril de 2012 Mensagens: 10 Localização: Cascavel, PR
|
Enviada: Qua Mai 27, 2015 12:25 pm Assunto: |
|
|
strak2012 escreveu: | transforme o arquivo jpeg em um arquivo hexadecimal depois basta copiar o conteúdo e jogar no campo varchar, para exibir o conteúdo novamente precisa remontar o arquivo jpeg através do hexadecimal
no post aqui mostra como converter trabar com arquivo e hexdecimal
http://www.activedelphi.com.br/forum/viewtopic.php?t=84854 |
Cara, não teria como você fazer ai pra mim um exemplo de como transformar a imagem que está no TImage em arquivo texto e depois fazer o processo contrario?? |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qui Mai 28, 2015 8:40 am Assunto: |
|
|
Código: |
...
{ Private declarations }
public
{ Public declarations }
myhex: string;
end;
var
Form1: TForm1;
// 52428800 -> 50mb em bytes
// 6553600 -> 50mb em longint
// 50mb de tamanho deve servir para dll
buff: array [0 .. 6553600] of longint;
implementation
{$R *.dfm}
function file2hex(Arquivo: string): string;
var
INFile: file of longint;
I, len: longint;
begin
AssignFile(INFile, Arquivo);
Reset(INFile);
len := filesize(INFile);
BlockRead(INFile, buff, len); // ler o arquivo de uma só vez
result := '';
for I := 0 to len - 1 do
result := result + inttohex(buff[I], 8);
CloseFile(INFile);
end;
procedure hex2File(HexText, Arquivo: string);
var
INFile: file of longint;
I, len: longint;
begin
len := length(HexText) div 8;
for I := 1 to len do
buff[I - 1] := strtoint('$' + copy(HexText, (I - 1) * 8 + 1, 8));
AssignFile(INFile, Arquivo);
Rewrite(INFile);
Reset(INFile);
BlockWrite(INFile, buff, len);
CloseFile(INFile);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
myhex := file2hex(OpenDialog1.FileName); // converte um arquivo em texto hex
Memo1.Lines.Text := myhex;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
nome: string;
begin
nome := extractfilepath(application.ExeName) + 'outfile.jpg';
hex2File(myhex, nome); //<- convert o texto em hex para um arquivo
Image1.Picture.LoadFromFile(nome);
deletefile(nome);
end;
|
Dependendo o tamanho da imagem jgp a conversão para hex da mesma pode demorar um pouco _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
daniel_paixao Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sexta-Feira, 13 de Abril de 2012 Mensagens: 10 Localização: Cascavel, PR
|
Enviada: Qui Mai 28, 2015 4:37 pm Assunto: |
|
|
CAra, não querendo abusar mas... teria como vc me mandar um exemplo convertendo direto do TImage pra Texto e depois o processo contrario? Tipo, eu não queria pegar pelo FileName, mas sim, direto pelo TImage por que hoje eu tenho uma rotina que tira foto pela webcam e joga num TImage
manja? |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qui Mai 28, 2015 9:18 pm Assunto: |
|
|
vou ver se faço um exemplo aqui, o segredo para isso estará no TmemoryStream; _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qui Mai 28, 2015 10:44 pm Assunto: |
|
|
Segue o código
Código: | unit umain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, jpeg,
Vcl.Imaging.pngimage;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Panel2: TPanel;
Image1: TImage;
Image2: TImage;
Panel3: TPanel;
Memo1: TMemo;
Panel1: TPanel;
Button2: TButton;
Button1: TButton;
StaticText1: TStaticText;
StaticText2: TStaticText;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
TextoHex: string;
function StreamToHex(ms: TMemoryStream): string;
procedure HexToStream(TextoHex: string; ms: TMemoryStream);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.StreamToHex(ms: TMemoryStream): string;
var
i: Integer;
tam: longint;
v: byte;
txt: string;
begin
tam := ms.Size;
ms.Position := 0;
TextoHex := '';
for i := 1 to tam do
begin
ms.Read(v, 1);
result := result + inttohex(v, 2);
end;
end;
procedure TForm1.HexToStream(TextoHex: string; ms: TMemoryStream);
var
i: Integer;
tam: longint;
v: byte;
txt: string;
begin
tam := length(TextoHex) div 2;
ms.SetSize(tam);
ms.Position := 0;
for i := 1 to tam do
begin
v := strtoint('$' + copy(TextoHex, ((i - 1) * 2) + 1, 2));
ms.Write(v, 1);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
if TJPEGImage(Image1.Picture.Graphic) <> nil then
TJPEGImage(Image1.Picture.Graphic).SaveToStream(ms)
else if TJPEGImage(Image1.Picture.Graphic) <> nil then
TJPEGImage(Image1.Picture.Graphic).SaveToStream(ms)
else if TPngImage(Image1.Picture.Graphic) <> nil then
TPngImage(Image1.Picture.Graphic).SaveToStream(ms);
StaticText2.Caption := 'Convertendo para hex-texto';
StaticText2.Refresh;
TextoHex := StreamToHex(ms);
StaticText2.Caption := 'Pronto';
StaticText2.Refresh;
ms.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ms: TMemoryStream;
jpg: TJPEGImage;
bmp: Tbitmap;
png: TPngImage;
jpgok: boolean;
bmpok: boolean;
pngok: boolean;
erro: boolean;
s: string;
begin
jpg := TJPEGImage.Create;
bmp := Tbitmap.Create;
png := TPngImage.Create;
ms := TMemoryStream.Create;
HexToStream(TextoHex, ms);
// BM
bmpok := pos('424D', TextoHex) = 1; // é um bmp
// ‰PNG
pngok := pos('89504E47', TextoHex) = 1; // é um png
// 'JFIF'
jpgok := pos('4A464946', TextoHex) < 50; // é um jpg
ms.Position := 0;
if bmpok then
begin
bmp.LoadFromStream(ms);
Image2.Picture.Assign(bmp);
end
else if pngok then
begin
png.LoadFromStream(ms);
Image2.Picture.Assign(png);
end
else if jpgok then
begin
jpg.LoadFromStream(ms);
Image2.Picture.Assign(jpg);
end;
ms.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
mstr: string;
begin
mstr := 'Tem certeza que deseja visualizar o texto hexdecimal no memo?' +
#13#10 + 'Esta operação costuma demorar muito! São ' +
formatfloat('#,###,###,###0', length(TextoHex)) +
' bytes a ser copiados ou seja' + #13#10 + formatfloat('#,###,###,###0',
length(TextoHex) div 1024) + ' Kb';
if length(TextoHex) > 0 then
if MessageDlg(mstr, mtCustom, [mbYes, mbNo], 0) = mrYes then
begin
StaticText2.Caption := 'Passando para o memo';
StaticText2.Repaint;
Memo1.Lines.Text := TextoHex;
StaticText2.Caption := 'Pronto';
StaticText2.Refresh;
end;
end;
end. |
_________________ Tudo podemos quando tudo sabemos!
Editado pela última vez por strak2012 em Qui Mai 28, 2015 10:49 pm, num total de 1 vez |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qui Mai 28, 2015 10:58 pm Assunto: |
|
|
Atenção:
Uma imagem de 100k representa 100*1024 bytes logo 102.400 bytes, isso para ser passado para um componente texto tal como Tmemo pode levar muito tempo a ideia é mante-lo sempre em uma string normal e trabalhar com assim mesmo.
Procure não usar imagem do tipo bmp pois esta tem um maior peso uma vez que a mesma não possui qualquer compressão, ao invés disso procure usar png ou jpg dê preferencia a png uma vez que a compressão deste formato é a melhor sem perca de qualidade da imagem.
Procure tb não usar imagem gigantes tipo altura x largura. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
daniel_paixao Novato
![Novato Novato](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star1.gif)
Registrado: Sexta-Feira, 13 de Abril de 2012 Mensagens: 10 Localização: Cascavel, PR
|
Enviada: Sex Mai 29, 2015 12:49 pm Assunto: |
|
|
strak2012 escreveu: | Atenção:
Uma imagem de 100k representa 100*1024 bytes logo 102.400 bytes, isso para ser passado para um componente texto tal como Tmemo pode levar muito tempo a ideia é mante-lo sempre em uma string normal e trabalhar com assim mesmo.
Procure não usar imagem do tipo bmp pois esta tem um maior peso uma vez que a mesma não possui qualquer compressão, ao invés disso procure usar png ou jpg dê preferencia a png uma vez que a compressão deste formato é a melhor sem perca de qualidade da imagem.
Procure tb não usar imagem gigantes tipo altura x largura. |
Então...e na sua opinião, será que eu eu conseguiria salvar essa Texto da imagem em um campo de banco de dados Firebird e depois recupera-lo de forma a montar a imagem novamente? Ou isso não é possível? EU pensei em criar uma tabela e cortar o texto em varias partes e guardar nessa tabela, pra esconder a imagem. É isso que eu preciso. Não poderia ser um campo Blob por que não me atenderia. Outra coisa: Eu tambem não quero usar os DataSets do Delphi pra guardar os dados, quero simplesmente fazer um comando insert com Format e passar a string mais ou menos assim: Texto := Format('INSERT INTO FOTO(IDDOC, SEQ,TEXTOFOTO) VALUES(%d,%d,%s)',[1,1,'GFDJHGFJHDGDDF564']). Você acha que é possível isso? Se sim, se você me der essa solução, pode passar a conta que te mando até uma grana. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
strak2012 Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
![](images/avatars/2276652e81dfb2e401.jpg)
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sex Mai 29, 2015 1:34 pm Assunto: |
|
|
daniel_paixao escreveu: | strak2012 escreveu: | Atenção:
Uma imagem de 100k representa 100*1024 bytes logo 102.400 bytes, isso para ser passado para um componente texto tal como Tmemo pode levar muito tempo a ideia é mante-lo sempre em uma string normal e trabalhar com assim mesmo.
Procure não usar imagem do tipo bmp pois esta tem um maior peso uma vez que a mesma não possui qualquer compressão, ao invés disso procure usar png ou jpg dê preferencia a png uma vez que a compressão deste formato é a melhor sem perca de qualidade da imagem.
Procure tb não usar imagem gigantes tipo altura x largura. |
Então...e na sua opinião, será que eu eu conseguiria salvar essa Texto da imagem em um campo de banco de dados Firebird e depois recupera-lo de forma a montar a imagem novamente? Ou isso não é possível? EU pensei em criar uma tabela e cortar o texto em varias partes e guardar nessa tabela, pra esconder a imagem. É isso que eu preciso. Não poderia ser um campo Blob por que não me atenderia. Outra coisa: Eu tambem não quero usar os DataSets do Delphi pra guardar os dados, quero simplesmente fazer um comando insert com Format e passar a string mais ou menos assim: Texto := Format('INSERT INTO FOTO(IDDOC, SEQ,TEXTOFOTO) VALUES(%d,%d,%s)',[1,1,'GFDJHGFJHDGDDF564']). Você acha que é possível isso? Se sim, se você me der essa solução, pode passar a conta que te mando até uma grana. |
A resposta é sim desde que a imagens possua dimensões pequenas como foto de rotos de pessoas com uma dimensão de até 300x500, daria sem problema
Dos pontos mais importantes estão tamanho do arquivo em bytes, dimensão da imagem.
sim dá converter a grafica de um timage e enviar o para a base e recurar o próprio texto da base em seguida jogar em um timage sem problema
mais lembre uma imagem de 100kb possui 100x1024 ou seja 102.400 bytes ou chars em resumo seu varchar teria que suportar varchar(102400) olha que estamos falando apenas de 100kb
veja ai como tem sua base e depois retorne algo. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|