如何检查字节数组是否为.emf或.wmf格式

3
我可以使用以下Java代码检查字节数组是否为WMF、EMF等元文件图像。
private boolean isMetaFileFormat(byte[] pictureData)
{
    BufferedImage image = null;
    try 
    {
        image = ImageIO.read(new ByteArrayInputStream(pictureData));
        if(image != null)
            return false;           
    } 
    catch (Exception e){ }
    return true;
}

但如何具体检查它是EMF还是WMF图像呢?

提前致谢...

3个回答

4

WMF文件的魔数为0x9AC6CDD7,EMF的魔数为0x01000000


1

使用Java Mime Magic Library可以轻松地实现通用的方式。下载

MagicMatch match = Magic.getMagicMatch(your_byte_array);
String mimeType = match.getMimeType();

if(mimeType.equals("image/x-emf")) {
    //here is emf
}
if(mimeType.equals("image/x-wmf")) {
    //here is wmf
}

1
你可以从字节数组中获取图像类型。
byte[] pictureData = null;
    ImageInputStream stream;
    try {
        stream = ImageIO.createImageInputStream(new ByteArrayInputStream(
                pictureData));
        Iterator<ImageReader> readers = ImageIO.getImageReaders(stream);
        while (readers.hasNext()) {
            ImageReader read = readers.next();
            read.getFormatName();
        }
    } catch (Exception e) {
    }

我尝试了您的代码,但是ImageReader对象在Word文档中嵌入的方程的字节数组中没有值:( - Rahogata
http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageReader.html#getFormatName() - mstfdz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接