Java判断图片格式的方法
在Java中,我们可以使用一些方法来判断图片的格式。在本文中,我们将介绍两种常用的方法:通过文件头和通过文件扩展名来判断图片格式。
通过文件头判断图片格式
每个文件的开头都有一个文件头(file header),用于标识文件的类型。不同的文件类型有不同的文件头。我们可以通过读取文件的前几个字节来获取文件头,并根据文件头来判断图片的格式。
以下是通过文件头判断图片格式的代码示例:
import java.io.FileInputStream;
import java.io.IOException;
public class ImageFormatUtils {
public static String getImageFormat(String filePath) throws IOException {
FileInputStream inputStream = null;
String formatName = null;
try {
inputStream = new FileInputStream(filePath);
byte[] headerBytes = new byte[8];
inputStream.read(headerBytes);
formatName = getFormatNameByHeader(headerBytes);
} finally {
if (inputStream != null) {
inputStream.close();
}
}
return formatName;
}
private static String getFormatNameByHeader(byte[] headerBytes) {
String formatName = null;
if (headerBytes.length < 8) {
return formatName;
}
if (isJPEG(headerBytes)) {
formatName = "JPEG";
} else if (isPNG(headerBytes)) {
formatName = "PNG";
} else if (isGIF(headerBytes)) {
formatName = "GIF";
} else if (isBMP(headerBytes)) {
formatName = "BMP";
} else if (isTIFF(headerBytes)) {
formatName = "TIFF";
}
return formatName;
}
private static boolean isJPEG(byte[] headerBytes) {
return (headerBytes[0] == (byte) 0xFF && headerBytes[1] == (byte) 0xD8);
}
private static boolean isPNG(byte[] headerBytes) {
return (headerBytes[0] == (byte) 0x89 && headerBytes[1] == (byte) 0x50
&& headerBytes[2] == (byte) 0x4E && headerBytes[3] == (byte) 0x47
&& headerBytes[4] == (byte) 0x0D && headerBytes[5] == (byte) 0x0A
&& headerBytes[6] == (byte) 0x1A && headerBytes[7] == (byte) 0x0A);
}
private static boolean isGIF(byte[] headerBytes) {
return (headerBytes[0] == (byte) 0x47 && headerBytes[1] == (byte) 0x49
&& headerBytes[2] == (byte) 0x46 && headerBytes[3] == (byte) 0x38
&& (headerBytes[4] == (byte) 0x37 || headerBytes[4] == (byte) 0x39)
&& headerBytes[5] == (byte) 0x61);
}
private static boolean isBMP(byte[] headerBytes) {
return (headerBytes[0] == (byte) 0x42 && headerBytes[1] == (byte) 0x4D);
}
private static boolean isTIFF(byte[] headerBytes) {
return (headerBytes[0] == (byte) 0x49 && headerBytes[1] == (byte) 0x49
&& headerBytes[2] == (byte) 0x2A && headerBytes[3] == (byte) 0x00)
|| (headerBytes[0] == (byte) 0x4D && headerBytes[1] == (byte) 0x4D
&& headerBytes[2] == (byte) 0x00 && headerBytes[3] == (byte) 0x2A);
}
}
上述代码中的getImageFormat
方法接受一个文件路径作为参数,并返回该文件的图片格式。通过读取文件的前8个字节,我们可以获取到文件的文件头。然后,我们通过调用getFormatNameByHeader
方法来判断图片的格式。
getFormatNameByHeader
方法根据文件头的不同特征值来判断图片的格式。上述示例中,我们判断了JPEG、PNG、GIF、BMP和TIFF这五种常见的图片格式。
通过文件扩展名判断图片格式
文件扩展名(file extension)是文件名的一部分,用于表示文件的类型。在文件名的最后一个.
后面的部分就是文件的扩展名。通过文件扩展名来判断图片的格式是