架构师_程序员_码农网

查看: 112|回复: 0
打印 上一主题 下一主题

[.NET Core] .NET Core 在 Linux 图片加水印问题

[复制链接]
跳转到指定楼层
楼主
发表于 2021-3-28 14:46:15 | 只看该作者
需求:现在 .NET Core 已经可以跨平台了,将项目发布到 Linux 环境下运行,项目会包含一些图片的处理,例如:生成验证码、图片加水印等。

首先,新建一个 .NET Core 3.1 的控制台项目(文章最后附上源码),图片处理需要安装:System.Drawing.Common

使用 nuget 包管理安装,命令如下:


将项目发布成单个文件,目标平台为:linux-x64,发布配置如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>bin\Release\netcoreapp3.1\publish\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishTrimmed>False</PublishTrimmed>
  </PropertyGroup>
</Project>
生成的单个执行文件,其实已经包含程序所执行需要的环境,不需要目标电脑在安装 SDK 了,弊端就是文件大小会变得非常大。

将发布后的文件上传到 centos 服务器,并且给文件赋予执行权限!否则,程序将无法运行,命令如下:


然后执行文件,可能遇到的问题如下:

.NET Core 发布单文件路径问题
https://www.itsvse.com/thread-9604-1-1.html

.NET Core Linux 报错:Couldn't find a valid ICU package installed...
https://www.itsvse.com/thread-9603-1-1.html

.NET Core 在 Linux 错误 Failure processing application bundle
https://www.itsvse.com/thread-9602-1-1.html
如果报错如下:

Unhandled exception. System.TypeInitializationException: The type initializer for 'Gdip' threw an exception.
---> System.DllNotFoundException: Unable to load shared library 'libgdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibgdiplus: cannot open shared object file: No such file or directory
   at System.Drawing.SafeNativeMethods.Gdip.GdiplusStartup(IntPtr& token, StartupInput& input, StartupOutput& output)
   at System.Drawing.SafeNativeMethods.Gdip..cctor()
   --- End of inner exception stack trace ---
   at System.Drawing.SafeNativeMethods.Gdip.GdipLoadImageFromFile(String filename, IntPtr& image)
   at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
   at System.Drawing.Image.FromFile(String filename)
   at ImageWatermark.Program.Main(String[] args)
Aborted
请使用如下命令安装 libgdiplus-devel


尝试重新执行,可以发现执行成功,如下图:



查看加水印后的图片,打开“57f2305a-6850-41af-80ab-8d2bf89569e5.jpg”文件,效果图如下:



发现,中文字符显示乱码,英文字符没有任何问题,查看系统安装的字体,命令如下:



如果系统中没有该命令的话,我们需要先安装相关的软件包,命令如下:

解决方案,安装开源可商用的 google-noto 字体,命令如下:



修改源码使用的字体,重新发布上传到服务器,执行结果如下:



可以看到,可以成功加上中文水印,代码如下:

源码下载:

游客,如果您要查看本帖隐藏内容请回复


(完)




上一篇:.NET Core 发布单文件路径问题
下一篇:.NET/C# 规则引擎 RulesEngine 教程
帖子永久地址: 

架构师_程序员_码农网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员_码农网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员_码农网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员_码农网管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-4-13 08:53

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表