Converter BMP para JPEG

Delphi

30/11/2004

Amigos, ja li varias mensagens e dicas de transformar bmp para jpeg. Muitas funcionam perfeitamente. Mas preciso de uma rotina que:
Mesmo transformando em JPEG, o arquivo deve diminiui consideralvemente.

Tipo:
tenhos 14.000 arquivos em bmp, com certa de 300kb cada um, eu executei as rotinas e dicas aqui citadas, a que compactou mais deixou os arquivos com 70kb cada um.

Baixei um programinha, que: esse mesmo arquivo de 300kb ele diminiu para 4 ou 5kb, com a mesma qualidade de que necessito.

Unico detalhe, esse programa solicita o tamanho da imagem, por padrao vem 150x150.

Via programa em delphi, alem de transformar bmp para jpg, como determinar tambem o tamanho da figura para que a mesma fique em torno desses 4 ou 5 kb?

Obrigado.


Pedih

Pedih

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

30/11/2004

Tente mecher na JPEGImage:

[color=green:fe40445b87]JPG.CompressionQuality := [i:fe40445b87]{0..100}[/i:fe40445b87];[/color:fe40445b87]



GOSTEI 0
Dopi

Dopi

30/11/2004

Esse código abaixo irá transformar qualquer Imagem lida pelo Delphi em um JPG de 300 x 250...

Eu uso ele para permitir o usuário capturar Imagens para Fotos de produtos.

O código faz referencia a alguns objetos e variaveis da Unit que ele está inserido, portanto é preciso adapata-lo às suas necessidades...

procedure TfrProdutos.aLerFotoExecute(Sender: TObject);
var ImgLoad, ImgReduc : TBitmap ;
    Rect : TRect ;
    CodBarras : String ;
begin
  CodBarras := dsCadastro.DataSet.FieldByName(´CODBARRAS´).AsString ;
  if CodBarras = ´´ then
     raise Exception.Create(´Esse produto não possui Cod.Barras´) ;

  ArqFoto := DirFotos + CodBarras + ´.jpg´ ;
  if OpenDialog1.Execute then
  begin
     ImgLoad  := TBitmap.Create ;
     ImgReduc := TBitmap.Create ;
     try
        ImgLoad.LoadFromFile( OpenDialog1.FileName ) ;

        ImgReduc.Format := ´JPEG´ ;
        ImgReduc.Width   := 300 ;
        ImgReduc.Height  := 250 ;
        Rect.Left := 0 ; Rect.Top := 0 ; Rect.Right := 300 ; Rect.Bottom := 250 ;
        ImgReduc.Canvas.StretchDraw(Rect, ImgLoad );
        
        ImgReduc.SaveToFile( ArqFoto );
        iFoto.Picture.Assign( ImgReduc );
     finally
        ImgLoad.Free ;
        ImgReduc.Free ;
     end ;
  end ;
end;



Para funcionar em CLX no Windows vc precisará da Unit : QJpegLoader escrita por: Andreas Hausladen ( http://unvclx.sourceforge.net )


GOSTEI 0
Pedih

Pedih

30/11/2004

Amigos, é o seguinte:
gero um relatorio, pelo fortes report.
nele, coloco 30 imagens, em formato .BMP.

no Momento em que as imagens vao para o relatorio, preciso trata-las.
tipo

procedure TfrmPrintOferta.RLDetailGrid1BeforePrint(Sender: TObject;
var PrintIt: Boolean);
begin

MinhaImagem (que é .BMP), se transforma para JPEG, reduzindo drasticamente seu tamanho.
quero que as imagens fique num tamanho de 4 ou 5 KB aproximadamente.

Ja testei algumas dicas, porem, o tamanho da imagem ainda fica grande.
(nao quero salvar as imagens). Mas existe uma opcao no Fortes Report de Salvar o Relatorio em HTML, ae que entra o detalhe de que as imagens devem estar pequenas (em RUNTIME apenas).

agradeco a todos> pedih_rp@yahoo.com.br

no aguardo.
end;


GOSTEI 0
Dopi

Dopi

30/11/2004

O processo é o mesmo... No exemplo que citei a variavel ImgReduc é um image já reduzido. Vc pode salva-la ou transporta-la para outro componente usando Assign()

Veja essa instruçao:
iFoto.Picture.Assign( ImgReduc );

o TImage IFoto agora tem o conteudo de ImgReduc.


GOSTEI 0
POSTAR