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.
Saber si una imagen jpg es realmente jpg
Comenzado por
santiago14
, ene 28 2014 10:25
3 respuestas en este tema
#1
Escrito 28 enero 2014 - 10:25
#2
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.
#3
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
Function GetImageFormat(Stream : TStream) : String; Var FirstBytes: AnsiString; begin Result := ''; if (Stream <> nil) and (Stream.Size > 40) then begin try SetLength(FirstBytes, 8); Stream.Read(FirstBytes[1], 8); if Copy(FirstBytes, 1, 2) = 'BM' then Result := '.bmp' else if FirstBytes = #137'PNG'#13#10#26#10 then Result := '.png' else if Copy(FirstBytes, 1, 3) = 'GIF' then Result := '.gif' else if Copy(FirstBytes, 1, 2) = #$FF#$D8 then Result := '.jpg' else if Copy(FirstBytes, 1, 3) = #$49#$49#$2A then Result := '.tif' else if Copy(FirstBytes, 1, 3) = #$0#$0#$01 then Result := '.ico' Finally end; end; End;
Saludos.
#4
Escrito 31 enero 2019 - 09:31
Siiiiiii, Excelente esto andaba buscando hace ya varios años