Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.2 KiB

10 months ago
using System.Text;
namespace StabilityMatrix.Core.Helper.Webp;
public class WebpReader(Stream stream) : BinaryReader(stream, Encoding.ASCII, true)
{
private uint headerFileSize;
public bool GetIsAnimatedFlag()
{
ReadHeader();
while (BaseStream.Position < headerFileSize)
{
if (ReadVoidChunk() is "ANMF" or "ANIM")
{
return true;
}
}
return false;
}
private void ReadHeader()
{
// RIFF
var riff = ReadBytes(4);
if (!riff.SequenceEqual([.."RIFF"u8]))
{
throw new InvalidDataException("Invalid RIFF header");
}
// Size: uint32
headerFileSize = ReadUInt32();
// WEBP
var webp = ReadBytes(4);
if (!webp.SequenceEqual([.."WEBP"u8]))
{
throw new InvalidDataException("Invalid WEBP header");
}
}
// Read a single chunk and discard its contents
private string ReadVoidChunk()
{
// FourCC: 4 bytes in ASCII
var result = ReadBytes(4);
// Size: uint32
var size = ReadUInt32();
BaseStream.Seek(size, SeekOrigin.Current);
return Encoding.ASCII.GetString(result);
}
}