'Construct this ID3 frame from raw string data.
Raises:
ID3JunkFrameError in case parsing failed
NotImplementedError in case parsing isn\'t implemented
ID3EncryptionUnsupportedError in case the frame is encrypted.'

@classmethod
def _fromData(cls, header, tflags, data):

    if (header.version >= header._V24):
        if (tflags & (Frame.FLAG24_COMPRESS | Frame.FLAG24_DATALEN)):
            datalen_bytes = data[:4]
            data = data[4:]
        if ((tflags & Frame.FLAG24_UNSYNCH) or header.f_unsynch):
            try:
                data = unsynch.decode(data)
            except ValueError:
                pass
        if (tflags & Frame.FLAG24_ENCRYPT):
            raise ID3EncryptionUnsupportedError
        if (tflags & Frame.FLAG24_COMPRESS):
            try:
                data = zlib.decompress(data)
            except zlib.error as err:
                data = (datalen_bytes + data)
                try:
                    data = zlib.decompress(data)
                except zlib.error as err:
                    raise ID3JunkFrameError(('zlib:    %s:    %r' % (err, data)))
    elif (header.version >= header._V23):
        if (tflags & Frame.FLAG23_COMPRESS):
            (usize,) = unpack('>L', data[:4])
            data = data[4:]
        if (tflags & Frame.FLAG23_ENCRYPT):
            raise ID3EncryptionUnsupportedError
        if (tflags & Frame.FLAG23_COMPRESS):
            try:
                data = zlib.decompress(data)
            except zlib.error as err:
                raise ID3JunkFrameError(('zlib:    %s:    %r' % (err, data)))
    frame = cls()
    frame._readData(header, data)
    return frame
