| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
amigadodelphi Aprendiz

Registrado: Sábado, 24 de Janeiro de 2009 Mensagens: 161
|
Enviada: Sex Ago 14, 2009 10:39 am Assunto: imagens no BD interbase sem ocupar muito espaço |
|
|
olá como estão?
como posso inserir imagens em um bd sem ocupar muito espaço de armazenamento?? |
|
| Voltar ao Topo |
|
 |
harleydk Profissional

Registrado: Quinta-Feira, 4 de Setembro de 2008 Mensagens: 635
|
Enviada: Sex Ago 14, 2009 10:42 am Assunto: |
|
|
quando eu preciso armazenar imagens, eu salvo apenas o caminho completo da imagem(c:\imagens\foto1.jpg) num campo string.
quando preciso, eu dou um loadFromFile e carrega a imagem num image. |
|
| Voltar ao Topo |
|
 |
amigadodelphi Aprendiz

Registrado: Sábado, 24 de Janeiro de 2009 Mensagens: 161
|
Enviada: Sex Ago 14, 2009 10:53 am Assunto: |
|
|
| eu posso so salvar o caminho e depois visualizar a imagem em um relatorio? |
|
| Voltar ao Topo |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Ago 14, 2009 11:22 am Assunto: |
|
|
| amigadodelphi escreveu: | olá como estão?
como posso inserir imagens em um bd sem ocupar muito espaço de armazenamento?? |
você pode impor algumas regras antes de salvar a imagem:
1º defina um limite de tamanho da imagem, p. ex.: a imagem não podem ultrapassar a X bytes. O usuário até pode incluir uma imagem grande, mas você diminui o seu tamanho.
2º se possível utilize imagem JPEG que são menores em comparação ao BMP. Mesmo que o usuario inseri imagem do tipo BMP você pode converter para JPEG.
3º verifique se realmente hà necessidade de gravar a imagem no banco, caso contrario, faça como o harleydk citou.
bom basicamente é isso. _________________ Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso. |
|
| Voltar ao Topo |
|
 |
amigadodelphi Aprendiz

Registrado: Sábado, 24 de Janeiro de 2009 Mensagens: 161
|
Enviada: Sex Ago 14, 2009 11:34 am Assunto: |
|
|
| Vc poderia me mostrar como posso fazer isso?? |
|
| Voltar ao Topo |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Ago 14, 2009 2:20 pm Assunto: |
|
|
corrigindo o que eu citei no meu último post:
| Citação: | | 1º defina um limite de tamanho da imagem, p. ex.: a imagem não podem ultrapassar a resolução desejada. O usuário até pode incluir uma imagem grande, mas você diminui o seu tamanho. |
| Código: | // adicionar a foto no campo imgFoto.
procedure Tform1.btnAddClick(Sender: TObject);
var
Jpg : TJpegImage;
Bmp : TBitmap;
sair : boolean;
begin
if pctImagem.Execute then
begin
imgFoto.Picture.Assign(nil); // imgFoto: Timage.
Jpg := TJpegImage.Create;
Bmp := TBitmap.Create;
try // pctImagem: TOpenPictureDialog.
if (AnsiLowerCase(ExtractFileExt(pctImagem.FileName)) = '.bmp') then
begin // converte de bmp para jpeg.
Bmp.LoadFromFile(pctImagem.FileName);
Jpg.Assign(Bmp);
Jpg.PixelFormat := jf24Bit; // 24 bit de pixel.
Jpg.Performance := jpBestQuality; // melhor qualidade.
Jpg.Compress;
end
else
Jpg.LoadFromFile(pctImagem.FileName);
// calcula nova dimensão para tamanho desejado.
ImgJpegRezise(Jpg, imgFoto.Width, imgFoto.Height);
imgFoto.Picture.Assign(Jpg);
finally
Bmp.Free;
Jpg.Free;
end;
end;
end;
// calcula nova dimensão para tamanho desejado
procedure Tform1.ImgJpegRezise(ObjJpg: TJPEGImage; Width, Height: Integer);
var
fRect: TRect;
ObjBmp: TBitmap;
begin
ObjBmp := TBitmap.Create; // cria bitmap para trabalhar com a imagem
try // AjustarImagem: ajusta resolução de modo que caiba dentro da resolução desejada
fRect := AjustarImagem(ObjJpg.Width, ObjJpg.Height, Width, Height);
ObjJpg.Scale := jsFullSize; // qualidade maxima.
ObjBmp.Width := fRect.Right;
ObjBmp.Height := fRect.Bottom;
ObjBmp.Canvas.FillRect(fRect); // seta nova resolução
ObjBmp.Canvas.StretchDraw(fRect, ObjJpg); // ajusta imagem a nova resolução
ObjJpg.Assign(ObjBmp); // carrega bitmap no jpg
finally
ObjBmp.Free;
end;
end;
// ajusta resolução de modo que caiba dentro da resolução desejada
function TfrmCadUser.AjustarImagem(ImgW, ImgH, nW, nH: Integer): TRect;
var
xySpct: Double;
begin
if ((ImgW > 0) and (ImgH > 0)) and ((ImgW > nW) or (ImgH > nH)) then
begin
xySpct := ImgW / ImgH;
if ImgW > ImgH then
begin
ImgW := nW;
ImgH := Trunc(nW / xySpct);
if ImgH > nH then
begin
ImgH := nH;
ImgW := Trunc(nH * xySpct);
end;
end
else
begin
ImgH := nH;
ImgW := Trunc(nH * xySpct);
if ImgW > nW then
begin
ImgW := nW;
ImgH := Trunc(nW / xySpct);
end;
end;
end;
with Result do
begin
Left := 0;
Top := 0;
Right := ImgW;
Bottom := ImgH;
end;
end; |
O que eu me lembro é só isso, se estiver faltando alguma coisa posta novamente. _________________ Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso. |
|
| Voltar ao Topo |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Ago 14, 2009 2:28 pm Assunto: |
|
|
para carregar a imagem:
| Código: | // carregar a imagem.
procedure Tform1.CarregarImagem(campo : TBlobField);
var
Jpg : TJpegImage;
MS : TMemoryStream;
spath : string;
begin
try
if campo.IsNull then // caso não tenha uma imagem,
begin // carrega a imagem padrão (sem foto).
spath := ExtractFilePath(Application.ExeName)+'\img_semfoto.jpg';
if FileExists(spath) then
imgFoto.Picture.LoadFromFile(spath);
end
else
begin // carrega a imagem.
MS := TMemoryStream.Create;
Jpg := TJpegImage.Create;
try
(campo as TBlobField).SaveToStream(MS);
MS.Position := 0;
Jpg.LoadFromStream(MS);
imgFoto.Picture.Assign(Jpg);
finally
Jpg.Free;
MS.Free;
end;
end;
except
on E: Exception do
begin
MessageBox(form1.handle,'Erro ao carregar a imagem! ','Atenção',mb_ok+mb_IconError);
raise Exception.Create(e.Message);
end;
end;
end; |
_________________ Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso. |
|
| Voltar ao Topo |
|
 |
|