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
Started by
santiago14
, Jan 28 2014 10:25 AM
3 replies to this topic
#1
Posted 28 January 2014 - 10:25 AM
#2
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.
#3
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
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
Posted 31 January 2019 - 09:31 AM
Siiiiiii, Excelente esto andaba buscando hace ya varios años