Qr Code generator with Skia.Sharp.
.NET CLI
$ dotnet add package SkiaSharp.QrCode
Package Manager
PM> Install-Package SkiaSharp.QrCode
There are many System.Drawing samples to generate QRCode, and there are a lot of cases I want avoid System.Drawing for GDI+ issue. However, you may require many conding to generate QRCode using ZXing.Net or ImageSharp or Core.Compat.System.Drawing.
I just want to create QR in much simpler way.
Performance and size and .NET Core support status.
Here's minimum sample to generate specific qrcode via args.
using SkiaSharp;
using SkiaSharp.QrCode.Image;
using System;
using System.IO;
namespace SimpleGenerate
{
class Program
{
static void Main(string[] args)
{
var content = "testtesttest";
using (var output = new FileStream(@"output/hoge.png", FileMode.OpenOrCreate))
{
// generate QRCode
var qrCode = new QrCode(content, new Vector2Slim(256, 256), SKEncodedImageFormat.Png);
// output to file
qrCode.GenerateImage(output);
}
}
}
}
If you want specify detail, you can generate manually.
using SkiaQrCode;
using SkiaSharp;
using System;
using System.IO;
namespace SkiaQrCodeSampleConsole
{
class Program
{
static void Main(string[] args)
{
var content = "testtesttest";
using (var generator = new QRCodeGenerator())
{
// Generate QrCode
var qr = generator.CreateQrCode(content, ECCLevel.L);
// Render to canvas
var info = new SKImageInfo(512, 512);
using (var surface = SKSurface.Create(info))
{
var canvas = surface.Canvas;
canvas.Render(qr, info.Width, info.Height);
// Output to Stream -> File
using (var image = surface.Snapshot())
using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
using (var stream = File.OpenWrite(@"output/hoge.png"))
{
data.SaveTo(stream);
}
}
}
}
}
}
You have 2 choice to run on Linux. If you don't need font operation, use SkiaSharp.NativeAssets.Linux.NoDependencies
.
- Use
SkiaSharp.NativeAssets.Linux
package. In this case, you need to installlibfontconfig1
via apt or others. - Use
SkiaSharp.NativeAssets.Linux.NoDependencies
2.80.2 or above. In this case, you don't needlibfontconfig1
.
SkiaSharp.NativeAssets.Linux.NoDependencies still can draw text, however can't search font cased on character or other fonts.
Detail: mono/SkiaSharp#964 (comment)
SkiaSharp.NativeAssets.Linux sample
sudo apt update && apt install -y libfontconfig1
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SkiaSharp.QrCode" Version="0.4.1" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.80.2" />
</ItemGroup>
</Project>
SkiaSharp.NativeAssets.Linux.NoDependencies sample
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SkiaSharp.QrCode" Version="0.4.1" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.80.2" />
</ItemGroup>
</Project>
Test Build lib.
docker build -t skiasharp.qrcode .
Test Run on linux.
cd samples/LinuxRunSamples
docker-compose up
MIT
aloisdeniel/Xam.Forms.QRCode : Qr Sample with Skia codebude/QRCoder : all QRCode generation algorithms