架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22211|回复: 2

[.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


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

QQ截图20210328143329.jpg

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

QQ截图20210328143423.jpg

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

QQ截图20210328142444.jpg

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

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

QQ截图20210328144303.jpg

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

QQ截图20210328144209.jpg

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

源码下载:

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


(完)




上一篇:.NET Core 发布单文件路径问题
下一篇:.NET/C# 规则引擎 RulesEngine 教程
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-6-16 14:10:48 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-12-29 11:49:27 | 显示全部楼层
可以看到,可以成功加上中文水印,代码如下:
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2024-4-23 23:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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