using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace Dpz.Core.Infrastructure.Imaging;

/// <summary>
/// 通过文件头(magic bytes) 识别图片格式。仅做轻量识别,不做编解码、缩放等图像处理。
/// </summary>
public interface IImageFormatDetector
{
    /// <summary>
    /// 从字节数组识别图片格式。
    /// </summary>
    /// <param name="bytes">图片原始字节</param>
    /// <returns>识别结果;若无法识别则返回 <see cref="ImageFormatInfo.Unknown"/></returns>
    ImageFormatInfo Detect(ReadOnlySpan<byte> bytes);

    /// <summary>
    /// 从流识别图片格式。会读取流头部少量字节;调用者负责流的生命周期。
    /// 若流支持 Seek,会在读取后回到原位置;否则流的位置会前进。
    /// </summary>
    /// <param name="stream">图片字节流</param>
    /// <param name="cancellationToken">取消标记</param>
    /// <returns>识别结果;若无法识别则返回 <see cref="ImageFormatInfo.Unknown"/></returns>
    ValueTask<ImageFormatInfo> DetectAsync(
        Stream stream,
        CancellationToken cancellationToken = default
    );
}
评论加载中...