ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

imagens no BD interbase sem ocupar muito espaço

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
amigadodelphi
Aprendiz
Aprendiz


Registrado: Sábado, 24 de Janeiro de 2009
Mensagens: 161

MensagemEnviada: Sex Ago 14, 2009 10:39 am    Assunto: imagens no BD interbase sem ocupar muito espaço Responder com Citação

olá como estão?

como posso inserir imagens em um bd sem ocupar muito espaço de armazenamento??
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
harleydk
Profissional
Profissional


Registrado: Quinta-Feira, 4 de Setembro de 2008
Mensagens: 635

MensagemEnviada: Sex Ago 14, 2009 10:42 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
amigadodelphi
Aprendiz
Aprendiz


Registrado: Sábado, 24 de Janeiro de 2009
Mensagens: 161

MensagemEnviada: Sex Ago 14, 2009 10:53 am    Assunto: Responder com Citação

eu posso so salvar o caminho e depois visualizar a imagem em um relatorio?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 3147
Localização: Araras-SP

MensagemEnviada: Sex Ago 14, 2009 11:22 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
amigadodelphi
Aprendiz
Aprendiz


Registrado: Sábado, 24 de Janeiro de 2009
Mensagens: 161

MensagemEnviada: Sex Ago 14, 2009 11:34 am    Assunto: Responder com Citação

Vc poderia me mostrar como posso fazer isso??
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 3147
Localização: Araras-SP

MensagemEnviada: Sex Ago 14, 2009 2:20 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 3147
Localização: Araras-SP

MensagemEnviada: Sex Ago 14, 2009 2:28 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB