【问题标题】:ImageMagick not working within docker environmentImageMagick 在 docker 环境中不起作用
【发布时间】:2019-09-13 13:24:12
【问题描述】:

我正在使用 .Net Core。在其中一个服务应用程序中,我使用的是 ImageMagick。 Nuget 包 Magick.NET-Q16-AnyCPU 7.14.3。当我在 Windows 上本地运行此服务时,下面提到的最后一条日志语句返回计数为 1,这是正确的,而当我在 docker 下运行相同的服务时,最后一条日志语句返回 0。我想我错过了一些设置需要针对docker环境进行。有人可以建议吗?

public ImageModel CreatePDFPreview(Stream stream)
{
    _logger.Information("Creating PDF preview for stream of size {size}", stream.Length);

    var settings = new MagickReadSettings();
    settings.Density = new Density(300, 300);

    using (var images = new MagickImageCollection())
    {
        stream.Position = 0;
        images.Read(stream, settings);

       _logger.Information("Images created for the stream, total {count}", images.Count);
    }
}

当我在 docker 中运行服务时,我没有收到任何异常,只是 images.Count 返回为 0

正如其中一篇文章所建议的,我在我的项目文件中添加了这个,有点不走运。

<ItemGroup>    
    <PackageReference Include="Magick.NET-Q16-AnyCPU" Version="7.14.3" />
</ItemGroup>

【问题讨论】:

    标签: c# docker service .net-core imagemagick


    【解决方案1】:

    您是否有可能在 docker 环境中缺少 GhostScript 并在本地环境中拥有它? 此工具是 Magick.Net 将 PDF 转换为图像的要求。 检查Convert PDF docs 了解更多信息。 如果我理解,您正在阅读 PDF 流并尝试将其转换为图像?

    另外,请查看Magick.Net github 上关于 Ghostscript 的评论。 确保匹配您的 Magick.NET 平台(32 位或 64 位)。如果只复制 dll,还有一个选项可以设置 Ghostscript 目录的路径,例如: MagickNET.SetGhostscriptDirectory(@"C:\MyProgram\Ghostscript"); 如果 Ghsotscript 用于商业用途,则还需要有关许可证的警告。

    【讨论】:

      【解决方案2】:

      我在 docker 中部署 Magick.Net 时遇到了同样的问题。 @Nesaje 关于缺少 GhostScript 库的假设帮助我找到了解决方案。我用命令在Dockerfile 中添加了ghostscript:

      运行 apt update -y && apt install -y ghostscript

      【讨论】:

      • ghostscript 现在已安装在 docker 中,但 MagickNET 不知何故无法正常工作。你用过MagickNET.SetGhostscriptDirectory 吗?
      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      相关资源
      最近更新 更多