Jump to content


Photo

Saber si una imagen jpg es realmente jpg


  • Please log in to reply
3 replies to this topic

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 posts
  • LocationCerrillos - Salta - Argentina

Posted 28 January 2014 - 10:25 AM

Buenas, estoy haciendo una pequeña aplicación donde necesito saber si la imagen que levanta el usuario es jpg. Sabemos que a un archivo le podemos cambiar su extesión y listo, Delphi ya me la agarra. Pero resulta que luego no es del tipo que esperábamos.
La cuestión es: ¿Cómo hago para asegurar que el archivo que me están subiendo es realmente jpg?

Gracias.
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 28 January 2014 - 05:57 PM

Hay varias formas. La mas simple es comprobar que los dos primeros bytes del archivo son FF D8, pero si quieres mas seguridad simplemente intenta cargar la imagen en un TJPEGImage dentro de un bloque "try ... except", si salta una excepción el archivo no es una imagen JPEG valida.
  • 0

#3 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 28 January 2014 - 09:20 PM

Hola, les comparto una función que tengo determinar el verdadero formato de una imagen sin importar el nombre que tenga, he tomado código de aquí y de allá, lamentablemente no puedo dar los créditos de esto a quien se lo merece. 

Les pido el favor que si encuentran como mejorarla o agregarle la identificación de nuevos formatos, la compartan con el grupo.


delphi
  1. Function GetImageFormat(Stream : TStream) : String;
  2. Var
  3.   FirstBytes: AnsiString;
  4. begin
  5.   Result := '';
  6.   if (Stream <> nil) and (Stream.Size > 40) then
  7.   begin
  8.       try
  9.         SetLength(FirstBytes, 8);
  10.         Stream.Read(FirstBytes[1], 8);
  11.         if Copy(FirstBytes, 1, 2) = 'BM' then
  12.             Result := '.bmp'
  13.         else if FirstBytes = #137'PNG'#13#10#26#10 then
  14.             Result := '.png'
  15.         else if Copy(FirstBytes, 1, 3) = 'GIF' then
  16.             Result := '.gif'
  17.         else if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
  18.             Result := '.jpg'
  19.         else if Copy(FirstBytes, 1, 3) = #$49#$49#$2A then
  20.             Result := '.tif'
  21.         else if Copy(FirstBytes, 1, 3) = #$0#$0#$01 then
  22.             Result := '.ico'
  23.       Finally
  24.       end;
  25.   end;
  26. End;


Saludos.
  • 0

#4 moscomx

moscomx

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 31 January 2019 - 09:31 AM

Siiiiiii, Excelente esto andaba buscando hace ya varios años


  • 0




IP.Board spam blocked by CleanTalk.