.NET Core中使用水印
在项目中,我需要给上传的图片添加水印,通过网上查找针对.NET Core 的找到两个方案:
使用 CoreCompat.System.Drawing 及用于非Windows的runtime.osx.10.10-x64.CoreCompat.System.Drawing或runtime.linux-x64.CoreCompat.System.Drawing
使用 System.Drawing.Common
遇到问题
经过尝试,发现方案1在.NET Core 2.2里面有类型冲突问题,如下:
The type 'Color' exists in both 'CoreCompat.System.Drawing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c0a7ed9c2333b592' and 'System.Drawing.Primitives, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
故我采用了方案2,一开始很顺利:本地Windows上测试、debug都正常!
但当我把代码部署到CentOS服务器上的时候,出现问题, 得到错误消息如下:
ERROR:The type initializer for 'Gdip' threw an exception.
at System.Drawing.SafeNativeMethods.Gdip.GdipLoadImageFromDelegate_linux(StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, IntPtr& image)
at System.Drawing.Image.InitFromStream(Stream stream)
at System.Drawing.Image.LoadFromStream(Stream stream, Boolean keepAlive)
问题解决
sudo yum install libgdiplus
cd /usr/lib
sudo ln -s libgdiplus.so gdiplus.dll
export LD_LIBRARY_PATH=/usr/lib
很遗憾,没有找到/usr/lib/libgdiplus.so,但我确实安装成功了。所以,经过摸索,我找到了,由于我的服务器是64位的,实际安装目录在/usr/lib64,且文件名是libgdiplus.so.0与libgdiplus.so.0.0.0,前者似乎是softlink。
OK到此成功解决,似乎都不需要重启服务,步骤如下:
sudo yum install libgdiplus
cd /usr/lib64
ln -s libgdiplus.so gdiplus.dll
export LD_LIBRARY_PATH=/usr/lib
参考文章
其他
安装libgdiplus的成功输出:
[root@izuf****1agz ****]# yum install libgdiplus
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
epel | 5.3 kB 00:00:00
extras | 3.4 kB 00:00:00
nginx | 2.9 kB 00:00:00
packages-microsoft-com-prod | 2.9 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/6): epel/x86_64/updateinfo | 974 kB 00:00:00
(2/6): extras/7/x86_64/primary_db | 200 kB 00:00:00
(3/6): updates/7/x86_64/primary_db | 5.0 MB 00:00:00
(4/6): epel/x86_64/primary_db | 6.7 MB 00:00:00
(5/6): packages-microsoft-com-prod/primary_db | 170 kB 00:00:00
(6/6): nginx/x86_64/primary_db | 46 kB 00:00:05
Resolving Dependencies
--> Running transaction check
---> Package libgdiplus.x86_64 0:2.10-10.el7 will be installed
--> Processing Dependency: libtiff.so.5(LIBTIFF_4.0)(64bit) for package: libgdiplus-2.10-10.el7.x86_64
--> Processing Dependency: libXrender.so.1()(64bit) for package: libgdiplus-2.10-10.el7.x86_64
--> Processing Dependency: libcairo.so.2()(64bit) for p