首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Drawing.Common在Linux中不能正常工作

System.Drawing.Common在Linux中不能正常工作
EN

Stack Overflow用户
提问于 2019-09-19 19:59:02
回答 1查看 1.6K关注 0票数 2

请考虑以下代码:

代码语言:javascript
复制
public static Stream WatermarkIt(Stream originalFile, Stream watermarkFile, string text1, string text2)
{
    var original = Image.FromStream(originalFile);
    var watermark = Image.FromStream(watermarkFile);
    using (var graphics = Graphics.FromImage(original))
    {
        graphics.DrawImage(watermark, new Point());
        var format = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.NoFontFallback);
        graphics.DrawString(text1, new Font("FreeSans", 50), new SolidBrush(Color.FromArgb(100, 127, 127, 127)), new Rectangle(0, 200, original.Width, original.Height));
        format = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.DirectionRightToLeft | StringFormatFlags.NoFontFallback, new CultureInfo("fa-IR").LCID);
        graphics.DrawString(text2, new Font("FreeSans", 50), new SolidBrush(Color.FromArgb(100, 127, 127, 127)), new Rectangle(0, 400, original.Width, original.Height), format);
    }
    var memoryStream = new MemoryStream();
    original.Save(memoryStream, ImageFormat.Jpeg);
    memoryStream.Seek(0, SeekOrigin.Begin);
    return memoryStream;
}

现在它应该在Windows下创建这个输出,这是正确的(.net核心2.2)。

但是在Linux下,输出是:

如果我将第二种字体改为:

代码语言:javascript
复制
graphics.DrawString(text2, new Font("Noto Arabic", 50) ...

我们得到了这个:

现在有几点观察:

第一个水印是从一个transparency.

  • Right-To-Left文件中读取的,颜色是灰色的,不透明度为77,但是在linux下,文本被解释为白色,一些文本绘制不正确。

这是因为System.Drawing.Common部分是在Linux中实现的,还是可以解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-04-17 13:49:04

System.Drawing.Common依赖libgdiplus库来呈现文本,而且这个库有两个引擎(cairo和pango),不幸的是,默认的引擎(cairo)不支持阿拉伯语。

因此,这个选项是不从apt-get或任何包管理器下载libgdiplus,因为它已经是用cairo引擎构建的,而且您必须下载源代码并自行构建它。

首先下载所需的依赖项:

代码语言:javascript
复制
sudo apt-get install libgif-dev autoconf libtool automake build-essential gettext libglib2.0-dev libcairo2-dev libtiff-dev libexif-dev

下载pango引擎:

代码语言:javascript
复制
sudo apt-get install libpango1.0-dev

然后下载libgdiplus的源代码:

代码语言:javascript
复制
sudo apt-get install git
git clone https://github.com/mono/libgdiplus.git

然后构建并安装这个库(首先在libgdiplus内部运行,即cd libgdiplus):

代码语言:javascript
复制
./autogen.sh --with-pango --prefix=/usr
make
sudo make install

现在您可以运行您的代码,您将看到阿拉伯语呈现正确。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58018202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档