Ir al contenido



Foto

Saber si una imagen jpg es realmente jpg


  • Por favor identifícate para responder
3 respuestas en este tema

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 328 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 28 enero 2014 - 10:25

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
  • 1.257 mensajes
  • LocationEspaña

Escrito 28 enero 2014 - 05:57

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
  • 528 mensajes
  • LocationCali, Colombia

Escrito 28 enero 2014 - 09:20

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 mensajes

Escrito 31 enero 2019 - 09:31

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


  • 0