How to check if a byte array is .emf or .wmf format

I can check if byte array is metafile like wmf, emf using below java code

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;
}

      

but how to specifically check if this image is emf or wmf?

Thanks in advance...

+3


source to share


3 answers


Use Java Mime Magic Library

for a simple and general way. Download



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


source


Magic number of files WMF 0x9AC6CDD7

, magic number EMF 0x01000000

.



+2


source


You can get the type of an image from a byte array

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) {
    }

      

+1


source