使用 ZXing.Net 生成 EAN 条码并获取 base64 字符串
Generate EAN Barcode Using ZXing.Net and get a base64 string
我想在 ASP.NET 中使用 ZXing.NET 生成 EAN 13 条码并将其转换为 base64 字符串。
我在如何转换 BarcodeWriterPixelData 时遇到问题,我从中获取:
BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
{
Format = BarcodeFormat.EAN_13
};
var pixelData = writer.Write(barcodeModel.BarcodeNumber);
我尝试使用 ImageSharp
var base64String = string.Empty;
using (Image<Rgba32> image = Image.Load<Rgba32>(pixelData.Pixels))
{
base64String = image.ToBase64String();
}
但是没用。
您可以使用 System.Drawing.Bitmap
来执行此操作。添加对 CoreCompat.System.Drawing
nuget 包的引用(处于测试阶段),然后使用此代码:
BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
{
Format = BarcodeFormat.EAN_13
};
var pixelData = writer.Write(barcodeModel.BarcodeNumber);
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new System.IO.MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// PNG or JPEG or whatever you want
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
var base64str = Convert.ToBase64String(ms.ToArray());
}
}
据我所知ImageSharp
还没有发布。我基于 this answer.
推荐了 CoreCompact
您可以使用 ImageSharp 加载原始像素数据(假设 pixelData.Pixels
是一个包含原始 rgba32 格式像素数据的 byte[])。而不是使用 Image.Load<Rgba32>(data, width, height)
你应该使用 Image.LoadPixelData<Rgba32>(data)
所以你最终的加载代码是:
var base64String = string.Empty;
using (Image<Rgba32> image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, height))
{
base64String = image.ToBase64String(ImageFormats.Png);
}
基本上 Image.Load<Rgba32>(data)
api 用于加载编码数据,即 png、jpg 等格式数据。其中 Image.LoadPixelData<Rgba32>(data)
api 用于将原始像素数据加载到图像对象中以供以后使用 processing/saving。
我想在 ASP.NET 中使用 ZXing.NET 生成 EAN 13 条码并将其转换为 base64 字符串。
我在如何转换 BarcodeWriterPixelData 时遇到问题,我从中获取:
BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
{
Format = BarcodeFormat.EAN_13
};
var pixelData = writer.Write(barcodeModel.BarcodeNumber);
我尝试使用 ImageSharp
var base64String = string.Empty;
using (Image<Rgba32> image = Image.Load<Rgba32>(pixelData.Pixels))
{
base64String = image.ToBase64String();
}
但是没用。
您可以使用 System.Drawing.Bitmap
来执行此操作。添加对 CoreCompat.System.Drawing
nuget 包的引用(处于测试阶段),然后使用此代码:
BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
{
Format = BarcodeFormat.EAN_13
};
var pixelData = writer.Write(barcodeModel.BarcodeNumber);
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new System.IO.MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// PNG or JPEG or whatever you want
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
var base64str = Convert.ToBase64String(ms.ToArray());
}
}
据我所知ImageSharp
还没有发布。我基于 this answer.
您可以使用 ImageSharp 加载原始像素数据(假设 pixelData.Pixels
是一个包含原始 rgba32 格式像素数据的 byte[])。而不是使用 Image.Load<Rgba32>(data, width, height)
你应该使用 Image.LoadPixelData<Rgba32>(data)
所以你最终的加载代码是:
var base64String = string.Empty;
using (Image<Rgba32> image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, height))
{
base64String = image.ToBase64String(ImageFormats.Png);
}
基本上 Image.Load<Rgba32>(data)
api 用于加载编码数据,即 png、jpg 等格式数据。其中 Image.LoadPixelData<Rgba32>(data)
api 用于将原始像素数据加载到图像对象中以供以后使用 processing/saving。