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)是文件名的一部分,用于表示文件的类型。在文件名的最后一个.后面的部分就是文件的扩展名。通过文件扩展名来判断图片的格式是