问题标签 [magicknet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
563 浏览

azure - Azure Functions 上的 ImageMagick 无法加载本机库

我正在尝试使用 Magick.NET 库在 Azure Functions 上进行图像处理。

我在控制台应用程序(.NET Core 3.1)中尝试了相同的代码,它可以正常工作。但是,在 Azure Functions 项目中运行相同的代码时,出现以下错误。

代码:

var image = new MagickImage(File.ReadAllBytes(@"<My Image Path>"));

例外:

System.TypeInitializationException: 'The type initializer for 'NativeMagickSettings' threw an exception.'

堆栈跟踪:

内部异常:

Unable to load DLL 'Magick.Native-Q8-x64.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)

内部异常 StackTrace

我相信这是由于 Azure Functions 包的组织方式和 Magick.NET 正在寻找要加载的本机二进制文件的路径。我可以确认本机二进制文件是在\bin\Debug\netcoreapp3.1\runtimes\<platform>\native构建函数应用程序时编写的。

我已经使用 ProcessMonitor 为每个应用程序跟踪了应用程序,并且可以看到函数应用程序在错误的位置查找。

它看起来在

\bin\Debug\netcoreapp3.1\ bin\ runtimes\[平台]\native

代替

\bin\Debug\netcoreapp3.1\runtimes\[平台]\native

(以下跟踪被过滤为仅显示path contains Magick.Native和过滤到控制台应用程序 exe 和 func.exe 的进程名称)

控制台应用程序跟踪 控制台应用程序跟踪

函数应用跟踪 函数应用跟踪

我也尝试过设置MagickAnyCPU.CacheDirectoryDirectory.GetCurrentDirectory()但没有帮助。


更新:

构建后,如果我将\netcoreapp3.1\runtimes文件夹复制\bin到此可以解决问题,但是如果有适当的解决方法,我目前不想依赖该技巧。

更新 2:

此问题似乎仅在使用 <TargetFramework>netcoreapp3.1</TargetFramework>Microsoft.NET.Sdk.Functions版本时发生3.0.x

使用旧版本时不会出现。我已经成功使用 <TargetFramework>netcoreapp2.1</TargetFramework>Microsoft.NET.Sdk.Functions版本1.0.x 没有这个问题。


那么,是否有一种解决方法可以让 ImageMagick 从正确的位置加载本机库?


潜在的解决方法是让 msbuildruntimes在构建完成后复制文件夹。

将以下内容添加到 csproj

或右键单击项目>属性>构建事件并将上述命令粘贴到post build event command line

这将复制所有的runtimes二进制文件,而不仅仅是我们想要的,增加最终构建的大小。

0 投票
2 回答
89 浏览

c# - MagickNET - 比较两张图片并仅显示差异,其余透明

目标:比较两个 PNG 图像并创建一个仅包含更改的新图像(未以红色或任何内容突出显示),而 png 的其余部分是透明的。

当比较两张相同的图片时,我最终得到的结果是相同的,但有点不透明。

任何帮助表示赞赏。

编辑:基本上我想结束的是这个。但是,我希望它是透明的,而不是具有白色背景的结果。 在此处输入图像描述

0 投票
2 回答
723 浏览

c# - 将 MagickImage 转换为位图

我认为这会更容易,但我找不到办法做到这一点。如何将 MagickImage 转换为 System.Drawing.Image(例如位图)

0 投票
0 回答
99 浏览

c# - Magick.Net 问题压缩 PDF 文件的位图

我知道如何从各种图像文件创建 PDF('imagePaths' 是 .jpg,'fileNameFullPath' 是 .pdf))

https://github.com/dlemstra/Magick.NET/blob/main/docs/ConvertPDF.md

这很好用,但是,如果我尝试使用位图

奇怪的事情发生了:

  • 'test.jpg'(我创建它只是为了检查大小)被正确压缩(52 kb)
  • 'test.pdf' 未压缩 (2000 kb)

保存到 .jpg 时似乎会发生压缩。有什么方法可以压缩图像而无需再次保存并重新加载?

0 投票
1 回答
115 浏览

imagemagick - MagicNET 将 PDF 转换为黑白 (1bit) PNG

我们的一位客户需要将 PDF 运输标签转换为 PNG 图像。PDF 图像需要为 300 DPI,位深为 1(纯黑白,无灰度)。

我已经完成了这项工作,但有些问题我找不到任何解决方案。

我的代码

结果

当使用以下设置(BitDepth(1) + 300 DPI)运行此代码时,PNG 图像为 1169x2303 和(4Bit 深度)。

当使用以下设置运行此代码时(已删除 BitDepth(1) + 300 DPI),PNG 图像为 1169x2303 和(32 位深度)。

这给了我 2 个主要问题,当 BitDepth 设置为 1 时,为什么 PNG 图像仍然是 4 位?其次,该 4 位图像的质量非常糟糕,条码扫描仪无法读取。感觉就像图像在写作过程中以某种方式调整了大小。我需要具有 32 位图像的“清晰度”,但需要 1 位。

有人可以在这里指出我正确的方向吗,感觉我缺乏图像转换的专业知识。

谢谢!

PS:我正在使用 Magick.NET-Q8-AnyCPU (7.23.3)

测试建议1

结果图像以黑线作为所有内容的边框,没有任何文本填充黑色,但图像现在按预期为 1 位。

0 投票
0 回答
71 浏览

svg - 带有 Windows 符号字体的 ImageMagick SVG(私人使用 unicode 字符)

我正在使用 MagickNet (ImageMagick for .NET) 来读取下面的 SVG 代码,其中包含 Windows 上“Symbol”真实类型字体的有效字符。字符为UF0B7(symbol.ttf字体的cmap表中的uniF0B7)。这是一个实心圆圈。我使用 ImageMagick 获得的图像包含一个内部写有 F0B7 的矩形。

这是我的包含这个特殊字符的 SVG 文件。它位于文本 XML 元素内(您可能会将其视为浏览器上的一个小方块):

这是我的 C# 代码:

有没有办法让 ImageMagick 使用系统的 Symbol 字体和这种私人使用的字符(根据 unicode 标准)?这个字符和其他同类字符经常被 Powerpoint 软件用于子弹。我需要在我自己的软件中使用可用的库将 pptx 幻灯片转换为 svg,然后对其进行返工,将段落隔离在单独的 SVG 中,以生成幻灯片动画。为了将最终的 SVG 转换为图像,我还可以使用 SVG.Net 等其他库,但是这个也有其他问题。到目前为止,MagickNet 是最精确的,除了这个问题。