netcore 图形处理跨平台组件

   现有的图形插件System.Drawing.Common NuGet 包现在被归为 Windows 特定的库。 在为非 Windows 操作系统编译时,平台分析器会在编译时发出警告。在跨平台linux部署时需要额外在dockerfile文件中添加相关命令用于安装libgdipus组件。它大约有 30000 行 C 代码,大部分未经测试,而且缺少很多功能。 libgdiplus 还具有许多用于图像处理和文本呈现的外部依赖项,例如 cairopango 和其他本机库。 这些依赖项使得维护和交付组件更具挑战性。官方建议使用跨平台程式库如:ImageSharp、SkiaSharp。

  下面分享一下本人用ImageSharp改造的相关生成条形码、二维码的方法(使用nuget包ZXing.Net.Bindings.ImageSharp.V2)。

 

using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using System.IO;
using ZXing.ImageSharp.Rendering;

namespace CLibrary_Standard2._1
{
    /// <summary>
    /// 条形/二维码处理
    /// </summary>
    public static class BarCodeExtensions
    {
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="link"></param>
        /// <param name="color">Black、Red等</param>
        /// <param name="width">二维码宽,默认500</param>
        /// <param name="height">二维码高,默认500</param>
        /// <returns></returns>
        public static Stream GetDimensionalCode(string link, string color = "Black", int width = 500, int height = 500)
        {
            var w = new QRCodeWriter();
            BitMatrix b = w.encode(link, BarcodeFormat.QR_CODE, width, height);
            var zzb = new ZXing.ImageSharp.BarcodeWriter<Rgba32>();
            zzb.Options = new EncodingOptions()
            {
                Margin = 0,
            };
            #region 设置颜色
            Color fore_color;
            if (!Color.TryParse(color, out fore_color))//没有的话默认黑色
            {
                fore_color = Color.Black;
            }
            zzb.Renderer = new ImageSharpRenderer<Rgba32>() { Foreground = fore_color, Background = Color.White };
            #endregion
            var ms = new MemoryStream();
            using (var image = zzb.Write(b))
            {

                image.SaveAsJpeg(ms);//保存于流
                image.SaveAsJpeg("QRCode_code.jpg");//直接保存相关路径
            }
            ms.Position = 0;//设置位置
            return ms;
        }

        /// <summary>
        /// 根据链接创建条形码
        /// </summary>
        /// <param name="link">链接</param>
        /// <returns>返回条形码图片二进制串</returns>
        public static Stream GetStripCode(string link)
        {
            var width = 800;
            var height = 400;
            var margin = 0;
            var barcodeWriter = new ZXing.ImageSharp.BarcodeWriter<Rgba32>
            {
                Format = BarcodeFormat.CODE_128,
                Options = new EncodingOptions
                {
                    Height = height,
                    Width = width,
                    PureBarcode = true,
                    Margin = margin
                }
            };
            var ms = new MemoryStream();
            using (var image = barcodeWriter.Write(link))
            {
                image.SaveAsJpeg(ms);//保存于流
                image.SaveAsJpeg("TXM_code.jpg");//直接保存相关路径
            }
            ms.Position = 0;//设置位置
            return ms;
        }
    }
}

 

posted @ 2022-08-19 14:44  風飄絮℃  阅读(222)  评论(0编辑  收藏  举报