最近灵机一动,准备把之前从window服务器上可以用,但是在linux服务器上用不了的功能点梳理一下。之前用QRCoder生成二维码,合成图片用的是System.Drawing(写的代码还巨复杂),但是在linux环境有问题,直接报错。
解决方案:
生成二维码使用ZXing.Net.Bindings.ImageSharp.V2
public static Image CreateQRCode(string value, int width = 512, int height = 512) { var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32> { Format = BarcodeFormat.QR_CODE, Options = new ZXing.QrCode.QrCodeEncodingOptions { DisableECI = true, CharacterSet = "UTF-8", Width = width, Margin = 1, Height = height } }; var image = writer.WriteAsImageSharp<Rgba32>(value); return image; }
合成2张图片使用SixLabors.ImageSharp.Drawing(里面依赖了SixLabors.ImageSharp)
/// <summary> /// 合并图片(小图合并到大图) /// </summary> /// <param name="mergeImagePath">需要被合并的图片(小图)</param> /// <param name="templateImagePath">模板图片(大图)</param> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public static Image MergeImage(Image mergeImagePath, string templateImagePath, int x, int y) { // 加载需要合并的图片 var templateImage = Image.Load(templateImagePath); templateImage.Mutate(o => { o.DrawImage(mergeImagePath, new Point(x, y), 1); }); return templateImage; }
好了,是不是代码简单多了。完美解决.netcore项目的生成二维码,合并图片在linux上的报错问题。希望有所帮助。