问题标签 [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.
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.CacheDirectory
,Directory.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
二进制文件,而不仅仅是我们想要的,增加最终构建的大小。
c# - 将 MagickImage 转换为位图
我认为这会更容易,但我找不到办法做到这一点。如何将 MagickImage 转换为 System.Drawing.Image(例如位图)
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 时似乎会发生压缩。有什么方法可以压缩图像而无需再次保存并重新加载?
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 位。
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 是最精确的,除了这个问题。