System.Drawing.Image.Save Into Stream 在基于 .Net 5 运行时 Debian 的容器中运行时无法正常工作

问题描述

我正在使用 System.Drawing.Common 5.0.2 从 .Net 5 中的多页 TIFF 中获取单个页字节。想法是选择 TIFF 图像的 ActiveFrame,然后保存到流中,最后将流的字节存储到集合中以供进一步使用。

在主机操作系统(Windows 10)上调试时代码运行良好。 但是,在基于 .Net 5 运行时 (Debian) 的 docker 容器中运行相同的代码、相同的 15 页 2MB TIFF 文件时,我无法正确获取页面字节。每个页面的字节大小相同,大约 200MB。假设大约为 100KB。

以下是代码

private void GetPagelist(string localDocPath,int pageCount,ConcurrentDictionary<int,byte[]> Pagelist)
    {
        Parallel.For(0,pageCount,index =>
            {
                using (var image = System.Drawing.Image.FromFile(localDocPath))
                {
                    using (var imagestream = new MemoryStream())
                    {
                        image.SelectActiveFrame(FrameDimension.Page,index);
                        image.Save(imagestream,ImageFormat.Tiff);
                        Pagelist.TryAdd(index,imagestream.ToArray());
                    }
                }
            });
    }

libgdiplus 已经通过 Dockerfile 安装到容器中

RUN apt-get update \
&& apt-get install -y --allow-unauthenticated \
    libc6-dev \
    libgdiplus \
    libx11-dev \
 && rm -rf /var/lib/apt/lists/*

如果您知道如何解决此问题,我们将不胜感激!

在主机操作系统 windows 10 上调试

Debuging in host OS Windows 10

在 .Net 5 运行时 (Debian) docker 容器中调试

Debugging in Debian docker container

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)