Skip to content

Commit 695ab8b

Browse files
committed
Update project references and enhance migration documentation for QRCoder v2
1 parent 31734e1 commit 695ab8b

File tree

4 files changed

+110
-5
lines changed

4 files changed

+110
-5
lines changed

QRCoderSamples/MigrationSamples.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using QRCoder;
2+
using System.Drawing.Imaging;
3+
4+
namespace QRCoderSamples;
5+
6+
public static class MigrationSamples
7+
{
8+
/// <summary>
9+
/// Example showing how to convert a QR code to base64 with a custom image format (e.g., JPEG).
10+
/// This is useful when migrating from Base64QRCode which previously supported multiple image formats.
11+
/// </summary>
12+
public static string ConvertQRCodeToBase64Jpeg()
13+
{
14+
// Generate QR code data
15+
using var qrCodeData = QRCodeGenerator.GenerateQrCode("Hello World", QRCodeGenerator.ECCLevel.Q);
16+
17+
// Use QRCode renderer to get a bitmap
18+
using var qrCode = new QRCode(qrCodeData);
19+
using var bitmap = qrCode.GetGraphic(20);
20+
21+
// Convert bitmap to JPEG byte array
22+
using var ms = new MemoryStream();
23+
bitmap.Save(ms, ImageFormat.Jpeg);
24+
byte[] jpegBytes = ms.ToArray();
25+
26+
// Convert to base64
27+
string base64String = Convert.ToBase64String(jpegBytes);
28+
29+
return base64String;
30+
}
31+
32+
/// <summary>
33+
/// Example showing how to convert a Bitmap to PNG byte array for use with SvgQRCode logos.
34+
/// SvgQRCode logos now require PNG-encoded byte arrays or SVG strings instead of Bitmap instances.
35+
/// </summary>
36+
public static string ConvertBitmapToSvgQRCodeWithLogo()
37+
{
38+
// Convert a Bitmap to PNG byte array
39+
using var bitmap = new System.Drawing.Bitmap("logo.jpg");
40+
using var ms = new MemoryStream();
41+
bitmap.Save(ms, ImageFormat.Png);
42+
byte[] pngBytes = ms.ToArray();
43+
44+
// Create SvgLogo with PNG byte array
45+
var logo = new SvgQRCode.SvgLogo(pngBytes, iconSizePercent: 15);
46+
47+
// Generate QR code with logo
48+
using var qrCodeData = QRCodeGenerator.GenerateQrCode("Hello World", QRCodeGenerator.ECCLevel.Q);
49+
using var qrCode = new SvgQRCode(qrCodeData);
50+
string svg = qrCode.GetGraphic(20, "#000000", "#ffffff", true, SvgQRCode.SizingMode.WidthHeightAttribute, logo);
51+
52+
return svg;
53+
}
54+
}

QRCoderSamples/QRCoderSamples.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<ProjectReference Include="..\QRCoder\QRCoder.csproj" />
9+
<ProjectReference Include="..\QRCoder.SystemDrawing\QRCoder.SystemDrawing.csproj" />
1010
</ItemGroup>
1111

1212
</Project>

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ QRCoder provides multiple renderers for different output formats and use cases.
110110
|----------|---------------|----------|---------------|
111111
| [**PngByteQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#25-pngbyteqrcode-renderer-in-detail) | PNG byte array || `new PngByteQRCode(data).GetGraphic(20)` |
112112
| [**SvgQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#26-svgqrcode-renderer-in-detail) | SVG string || `new SvgQRCode(data).GetGraphic(20)` |
113-
| [**QRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#21-qrcode-renderer-in-detail) | System.Drawing.Bitmap | Windows¹ | `new QRCode(data).GetGraphic(20)` |
114-
| [**ArtQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#211-artqrcode-renderer-in-detail) | Artistic bitmap with custom images | Windows¹ | `new ArtQRCode(data).GetGraphic(20)` |
113+
| [**QRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#21-qrcode-renderer-in-detail) | System.Drawing.Bitmap | SystemDrawing¹ | `new QRCode(data).GetGraphic(20)` |
114+
| [**ArtQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#211-artqrcode-renderer-in-detail) | Artistic bitmap with custom images | SystemDrawing¹ | `new ArtQRCode(data).GetGraphic(20)` |
115115
| [**AsciiQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#22-asciiqrcode-renderer-in-detail) | ASCII art string || `new AsciiQRCode(data).GetGraphic(1)` or `new AsciiQRCode(data).GetGraphicSmall()` |
116116
| [**Base64QRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#23-base64qrcode-renderer-in-detail) | Base64 encoded image || `new Base64QRCode(data).GetGraphic(20)` |
117117
| [**BitmapByteQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#24-bitmapbyteqrcode-renderer-in-detail) | BMP byte array || `new BitmapByteQRCode(data).GetGraphic(20)` |
@@ -121,7 +121,8 @@ QRCoder provides multiple renderers for different output formats and use cases.
121121
| [**UnityQRCode**](https://github.com/Shane32/QRCoder/wiki/Advanced-usage---QR-Code-renderers#27-unityqrcode-renderer-in-detail) | Unity Texture2D | Unity³ | `new UnityQRCode(data).GetGraphic(20)` |
122122

123123
**Notes:**
124-
- ¹ Requires Windows or System.Drawing.Common package (uses GDI+)
124+
125+
- ¹ Requires the [QRCoder.SystemDrawing](https://www.nuget.org/packages/QRCoder.SystemDrawing) package (Windows or System.Drawing.Common, uses GDI+)
125126
- ² Requires the [QRCoder.Xaml](https://www.nuget.org/packages/QRCoder.Xaml) package
126127
- ³ Requires the [QRCoder.Unity](https://www.nuget.org/packages/QRCoder.Unity) package
127128

docs/migrations/migration2.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,60 @@ _Coming soon - this section will be populated as new features are added to v2._
88

99
## Breaking Changes
1010

11-
### Minimum framework version is now .NET Standard 2.0
11+
### 1. Minimum framework version is now .NET Standard 2.0
1212

1313
Upgrade your project to one of the following frameworks if required:
1414

1515
- .NET Framework 4.6.2 or higher
1616
- .NET Core 2.0 or higher
1717
- .NET 5 or higher
18+
19+
### 2. QRCode and ArtQRCode moved to separate package
20+
21+
The QRCode and ArtQRCode renderers have been moved to the [QRCoder.SystemDrawing](https://www.nuget.org/packages/QRCoder.SystemDrawing) NuGet package.
22+
23+
### 3. Base64QRCode only supports PNG format
24+
25+
Base64QRCode now only supports PNG format. To use other image formats, use a different renderer and convert to base64:
26+
27+
```csharp
28+
using QRCoder;
29+
30+
// Generate QR code data
31+
using var qrCodeData = QRCodeGenerator.GenerateQrCode("Hello World", QRCodeGenerator.ECCLevel.Q);
32+
33+
// Use QRCode renderer to get a bitmap
34+
using var qrCode = new QRCode(qrCodeData);
35+
using var bitmap = qrCode.GetGraphic(20);
36+
37+
// Convert bitmap to JPEG byte array
38+
using var ms = new MemoryStream();
39+
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
40+
byte[] jpegBytes = ms.ToArray();
41+
42+
// Convert to base64
43+
string base64String = Convert.ToBase64String(jpegBytes);
44+
```
45+
46+
### 4. SvgQRCode logos must be PNG byte arrays or SVG strings
47+
48+
SvgQRCode logos now require PNG-encoded byte arrays or SVG strings instead of Bitmap instances. Use the SvgLogo constructor with either a byte array for PNG images or a string for SVG content.
49+
50+
```csharp
51+
using QRCoder;
52+
using System.Drawing.Imaging;
53+
54+
// Convert a Bitmap to PNG byte array
55+
using var bitmap = new Bitmap("logo.jpg");
56+
using var ms = new MemoryStream();
57+
bitmap.Save(ms, ImageFormat.Png);
58+
byte[] pngBytes = ms.ToArray();
59+
60+
// Create SvgLogo with PNG byte array
61+
var logo = new SvgQRCode.SvgLogo(pngBytes, iconSizePercent: 15);
62+
63+
// Generate QR code with logo
64+
using var qrCodeData = QRCodeGenerator.GenerateQrCode("Hello World", QRCodeGenerator.ECCLevel.Q);
65+
using var qrCode = new SvgQRCode(qrCodeData);
66+
string svg = qrCode.GetGraphic(20, "#000000", "#ffffff", true, SvgQRCode.SizingMode.WidthHeightAttribute, logo);
67+
```

0 commit comments

Comments
 (0)