Imagem JPG em banco Mysql
22/12/2018
0
Boa tarde estou tenta salvar uma imagem (.jpg) através de um DBimage em um banco Mysql tipo Blob e não estou conseguindo.
Em formato Bitmap eu consigo salvar no banco, mais preciso em .jpg.
Alguém pode me ajudar. Segue o código que estou usando.
Em formato Bitmap eu consigo salvar no banco, mais preciso em .jpg.
Alguém pode me ajudar. Segue o código que estou usando.
procedure Tfrmpostagem.DBImage1Click(Sender: TObject); var JPG:TJPEGImage; BMP:TBitmap; MS :TMemoryStream; begin if OpenPictureDialog1.Execute then begin DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); MS := TMemoryStream.Create; try DBImage1.Picture.Graphic.SaveToStream(MS); (DataModule1.TBpostagem.FieldByName('img1') as TBlobField).LoadFromStream(MS); finally MS.Free; end; end; end;
Jordan Bernardes
Curtir tópico
+ 0
Responder
Posts
27/12/2018
Fernando Wahl
Bom dia Jordan, como vai, essa rotina abaixo, grava a imagem completa (não so o caminho) no banco de dados no caso MYSQL...
Crie uma tabela no banco de dados e no campo onde vai a imagem coloque-o do tipo longblob(aqui que vc possivelmente está errando, não pode ser blob, tem que ser longblob).Porque usar longblob? Esse tipo de campo armezena arquivos binarios no nosso caso imagens com tamanho grandes..assim melhor que usar o blob ou mediumblob que armazenam imagem medias e pequenas respectivamente.
Na USES do form declare : DBTables , db
logo abaixo do uses declare:
const
OffsetMemoryStream : Int64 = 0;
//Busca a imagem geralmente atribuido no onclick de um botão
//Esse Timage é um componente da palete additional
if OPPicture.execute then
Timage.Picture.LoadFromFile(OPPicture.FileName);
// salva a imagem no banco
//
var sqltexto : string;
jpg1 : TJpegImage;
BEGIN
if OPPicture.FileName <>'' then
begin
jpg1 := TJpegImage.Create;
jpg1.LoadFromFile(OPPicture.FileName);
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').Assign(jpg1);
jpg1.Free;
end
else
Begin
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').value := '';
End;
END:
// Puxa imagem do banco e jogua para o Timage
//
procedure ExibeFoto(DataSet : TDataSet; BlobFieldName : String; ImageExibicao :
TImage);
begin
if not(DataSet.IsEmpty) and
not((DataSet.FieldByName(BlobFieldName) as TBlobField).IsNull) then
try
MemoryStream := TMemoryStream.Create;
Jpg := TJpegImage.Create;
(DataSet.FieldByName(BlobFieldName) as
TBlobField).SaveToStream(MemoryStream);
MemoryStream.Position := OffsetMemoryStream;
Jpg.LoadFromStream(MemoryStream);
ImageExibicao.Picture.Assign(Jpg);
finally
// Jpg.Free;
MemoryStream.Free;
end
else
ImageExibicao.Picture := Nil;
end;
//chama a procedure...colocar em algum evento eu uso no ONSHOW
ExibeFoto(nome_da_tabela,'nome_do_campo_da_imagem',Timage);
//Deletar a imagem do Timage..colocoque um botão deletar no onclick declare:
OpPicture.FileName := ''; // limpa o caminho do arquivo
Timage.Picture:=nil;
Crie uma tabela no banco de dados e no campo onde vai a imagem coloque-o do tipo longblob(aqui que vc possivelmente está errando, não pode ser blob, tem que ser longblob).Porque usar longblob? Esse tipo de campo armezena arquivos binarios no nosso caso imagens com tamanho grandes..assim melhor que usar o blob ou mediumblob que armazenam imagem medias e pequenas respectivamente.
Na USES do form declare : DBTables , db
logo abaixo do uses declare:
const
OffsetMemoryStream : Int64 = 0;
//Busca a imagem geralmente atribuido no onclick de um botão
//Esse Timage é um componente da palete additional
if OPPicture.execute then
Timage.Picture.LoadFromFile(OPPicture.FileName);
// salva a imagem no banco
//
var sqltexto : string;
jpg1 : TJpegImage;
BEGIN
if OPPicture.FileName <>'' then
begin
jpg1 := TJpegImage.Create;
jpg1.LoadFromFile(OPPicture.FileName);
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').Assign(jpg1);
jpg1.Free;
end
else
Begin
nome_da_tabela.FieldByName('nome_do_campo_da_imagem').value := '';
End;
END:
// Puxa imagem do banco e jogua para o Timage
//
procedure ExibeFoto(DataSet : TDataSet; BlobFieldName : String; ImageExibicao :
TImage);
begin
if not(DataSet.IsEmpty) and
not((DataSet.FieldByName(BlobFieldName) as TBlobField).IsNull) then
try
MemoryStream := TMemoryStream.Create;
Jpg := TJpegImage.Create;
(DataSet.FieldByName(BlobFieldName) as
TBlobField).SaveToStream(MemoryStream);
MemoryStream.Position := OffsetMemoryStream;
Jpg.LoadFromStream(MemoryStream);
ImageExibicao.Picture.Assign(Jpg);
finally
// Jpg.Free;
MemoryStream.Free;
end
else
ImageExibicao.Picture := Nil;
end;
//chama a procedure...colocar em algum evento eu uso no ONSHOW
ExibeFoto(nome_da_tabela,'nome_do_campo_da_imagem',Timage);
//Deletar a imagem do Timage..colocoque um botão deletar no onclick declare:
OpPicture.FileName := ''; // limpa o caminho do arquivo
Timage.Picture:=nil;
Responder
Clique aqui para fazer login e interagir na Comunidade :)