• 0
Sign in to follow this  
schaukoski

Image, Como Saber Formato (extensão) Da Picture.

Question

Olá ...

Estou tendo alguns problemas com isto.

Eu tenho um opendialog na minha aplicação, aonde eu importo imagens do computador para meu componente "image2".

Em seguida, eu dou image2.picture.savetofile, e salvo como .BMP...

Aí está o problema, porquê, eu aceito JPEG, e JPG, se eu salvar como .bmp uma imagem jpeg , não irá abrir

posteriormente...

Eu preciso que abra JPEG e JPG e BMP, colocar filtro no open dialog não seria útil.

Seria necessário saber, a extensão da imagem que está no meu image2, para salvá-la ( através de condição ) se ela é bmp, ou jpeg, jpg...

Obrigado!

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Cara, só adapta ele pro seu código, é que eu to meio corrido aqui na empresa... qualquer dúvida escrevi ai que eu respondo...

$ext = explode(".",$_FILES["foto"]["name"]);

# explode tem a função de separar a string pelo caracter informado, no exemplo ".")

# $_FILES serve para buscar arquivos

$ext = $ext[sizeof($ext)-1];

# sizeof pega o tamanho no vetor

echo $ext;

Share this post


Link to post
Share on other sites
  • 0

Tudo bem, é que no caso eu não vou buscar uma imagem, eu tenho ela já no meu componente IMAGE2...

eu não intendi, o que é o $ext, ele seria meu image2.picture.namepath algo assim?

Obrigado.

Share this post


Link to post
Share on other sites
  • 0

Isso... é que no meu caso eu recebia ela de um form e quebrava pra verificar a extensão, pois também tinha o mesmo problema que você, só aceitava .jpg.... A diferença é que eu recebia ela do usuario, você vai ter que "abrir" ela ai pra verificar a extensão... Se você não conseguir, posta seu código ai que fica mais fácil de te ajudar ok... abraços

Share this post


Link to post
Share on other sites
  • 0

OK Renato.

eu tenho 3 possibilidades de formatos, JPG, JPEG e BMP.

eu tenho meu componente image2 no form, e tenho tambem o openpicturedialog, que é aonde eu busco a imagem e trago para o image2.

até ai tudo bem, ele procura a imagem desejada, da OK, a imagem aparece la no image2, e na hora de salvar que é o problema, porque eu não sei qual extensão que veio, podem ser uma das 3 formatos possíveis(jpeg, jpg bmp).

o valor da extensao vai ficar em uma variável? isso que eu não intendi do seu código...

tem como voce fazer um exemplo , com meu componente image2?

Share this post


Link to post
Share on other sites
  • 0

Tudo bem.

procedure TFormTCadCF.SBgravarClick(Sender: TObject);
begin
image2.Picture.SaveToFile('c:\fichario\foto\'+dbedit1.text+'.bmp');
end;

Obrigado.

Share this post


Link to post
Share on other sites
  • 0

opa

eheh de começo achei que fosse PHP, pelo post do

Renato...

Seguinte, no OpenPictureDialog que você fica sabendo

o tipo de imagem exemplo:

var

extensao: String;

begin

if OpenPictureDialog.Execute then

begin

extensao := ExtractFileExt(OpenPictureDialog.Filename);

e na hora de salvar só você fazer

image2.Picture.SaveToFile('c:\fichario\foto\'+dbedit1.text+ extensao);

Talvez seja necessário colocar a variavel que armazena a

extensão como global e não na rotina em si já que pra

carregar e salvar são duas rotinas diferentes...

abs

Share this post


Link to post
Share on other sites
  • 0

schaukoski, você vai sempre gravar no formato bmp?

Por acaso tem algo a ver com o seu outro post. Voce está transformando em BMP para gravar no blob ou disco?

Se for, e você estiver fazendo o resize da figura (transformando em thumbnail), então veja esta adaptação que fiz daquela função MakeThumbNail2 (eu a renomeei aqui):

procedure MakeThumbNail(aSource :TGraphic; aDest: TBitmap; iWidth, iHeight: Integer);
var
  Escala :Double;
begin
  aDest.Width := iWidth;
  aDest.Height := iHeight;

 // Esta parte é utilizada para manter a proporção, sem que
 // o maior dos lados ultrapasse a maior medida informada (acho que está 100%)
  Escala := aSource.Width /aSource.Height;
  if (iWidth *Escala) > iHeight then
    aDest.Height := Round(iHeight /Escala)
  else
    if (iHeight /Escala) > iWidth then
      aDest.Width := Round(iWidth *Escala);

 // Desenha a imagem no tamanho calculado
  aDest.Canvas.StretchDraw(Rect(0, 0, aDest.Width, aDest.Height), aSource);
end;

// Carrega imagem para visualização em Image1
procedure TForm1.BtnLoadClick(Sender: TObject);
begin
 // Lê qualquer tipo de imagem permitido
  if OpenPictureDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

// Grava imagem visualizada no Image1 para um arquivo bmp (reduzido)
procedure TForm1.BtnSaveClick(Sender: TObject);
var
  BmpDst :TBitmap;
begin
 // Verifica se há uma imagem carregada
  if Assigned(Image1.Picture.Graphic) then
  begin
   // Cria bitmap destino a ser utilizado na gravação
    BmpDst := TBitmap.Create;
    try
     // Transforma a imagem carregada (qualquer tipo) em um thumbnail BMP
      MakeThumbNail(Image1.Picture.Graphic, BmpDst, 100, 100);
         // *** Opção para gravar em arquivo ou na base de dados ***
     // 1) Grava a imagem no formato BMP
      BmpDst.SaveToFile('c:\fichario\foto\'+dbedit1.text+'.bmp');

     // 2) Grava a imagem no formato BMP num campo da tabela
          DBImage1.Picture.Assign(BmpDst);

     // Limpa o Image1
      Image1.Picture.Assign(nil);
    finally
      BmpDst.Free;
    end;
  end;
end;

Ao utilizar como origem (aSource) um TGraphic, não precisamos nos preocupar com que tipo de imagem ela é.

Abraços

Edited by Micheus

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this