You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SkiaSharp压缩GIF图片失败:encodedData为空无法编码

问题分析与解决方案

核心问题

你的代码存在两个关键问题导致encodedData为空:

  1. SkiaSharp不支持GIF编码:SKImage.Encode方法不支持SKEncodedImageFormat.Gif格式,调用后会返回null——Skia本身对GIF的支持仅偏向解码,没有内置的GIF编码能力。
  2. GIF动画帧丢失:SKBitmap.Decode读取GIF文件时,只会解码第一帧图像,丢失了GIF的动画序列信息,即便编码成功也只能得到静态图。

解决方案

场景1:处理单帧GIF(转格式压缩)

如果你的GIF是静态单帧,直接转成WebP/JPEG等支持编码的格式压缩即可,修改代码如下:

using (var inputStream = System.IO.File.OpenRead(@"C:\Users\NidalMomani\Downloads\ban.gif"))
{
    using (var inputStreamWithSeek = new SKManagedStream(inputStream))
    {
        using (var originalBitmap = SKBitmap.Decode(inputStreamWithSeek))
        {
            using (var outputStream = System.IO.File.Create(@"C:\Users\NidalMomani\Downloads\compressingfiles\bannergifnew.webp"))
            {
                using (var image = SKImage.FromBitmap(originalBitmap))
                {
                    // 使用WebP编码,支持质量参数调节
                    using (var encodedData = image.Encode(SKEncodedImageFormat.Webp, 80))
                    {
                        encodedData.SaveTo(outputStream);
                    }
                }
            }
        }
    }
}

场景2:处理动画GIF(保留动画效果)

如果需要保留GIF的动画效果,SkiaSharp无法直接完成编码,建议使用专门的图像库如ImageSharp(支持动画GIF的完整解码与编码),示例代码如下:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Gif;
using SixLabors.ImageSharp.Processing;

// 读取原GIF文件
using (var image = Image.Load(@"C:\Users\NidalMomani\Downloads\ban.gif"))
{
    // 配置GIF编码参数
    var encoder = new GifEncoder
    {
        Quality = 80,
        RepeatCount = 0 // 设置为0表示无限循环
    };
    
    // 保存压缩后的动画GIF
    image.Save(@"C:\Users\NidalMomani\Downloads\compressingfiles\bannergifnew.gif", encoder);
}

注意事项

  • 使用ImageSharp前需要通过NuGet安装SixLabors.ImageSharp和SixLabors.ImageSharp.Formats.Gif包
  • SkiaSharp对GIF的支持仅适合读取单帧内容,不适合处理动画GIF的编码需求

内容的提问来源于stack exchange,提问作者Nidal MOMANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:10:20