Skip to content

Commit c9c9f1b

Browse files
authored
Merge pull request #502 from codebude/500-svgqrcode-with-logo-and-disable-quitzones-has-a-hole
Fix rendering of logo background in SvgQRCode
2 parents 2f29042 + 538301d commit c9c9f1b

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

QRCoder/SvgQRCode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public string GetGraphic(Size viewBox, string darkColorHex, string lightColorHex
126126
for (int xi = 0; xi < drawableModulesCount; xi += 1)
127127
{
128128
matrix[yi, xi] = 0;
129-
if (bitArray[xi+offset] && (logo == null || !logo.FillLogoBackground() || !IsBlockedByLogo((xi+offset)*pixelsPerModule, (yi+offset) * pixelsPerModule, logoAttr, pixelsPerModule)))
129+
if (bitArray[xi+offset] && (logo == null || !logo.FillLogoBackground() || !IsBlockedByLogo(xi * pixelsPerModule, yi * pixelsPerModule, logoAttr, pixelsPerModule)))
130130
{
131131
if(x0 == -1)
132132
{

QRCoderTests/SvgQRCodeRendererTests.cs

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@ namespace QRCoderTests
1515
public class SvgQRCodeRendererTests
1616
{
1717

18-
private string GetAssemblyPath()
19-
{
20-
return
21-
#if NET5_0
22-
AppDomain.CurrentDomain.BaseDirectory;
23-
#else
24-
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).Replace("file:\\", "");
25-
#endif
26-
}
27-
2818
[Fact]
2919
[Category("QRRenderer/SvgQRCode")]
3020
public void can_render_svg_qrcode_simple()
@@ -113,7 +103,7 @@ public void can_render_svg_qrcode_with_png_logo_bitmap()
113103
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
114104

115105
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
116-
var logoBitmap = (Bitmap)Image.FromFile(GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
106+
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
117107
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
118108
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
119109

@@ -122,6 +112,44 @@ public void can_render_svg_qrcode_with_png_logo_bitmap()
122112
var result = HelperFunctions.StringToHash(svg);
123113
result.ShouldBe("78e02e8ba415f15817d5ed88c4afca31");
124114
}
115+
116+
[Fact]
117+
[Category("QRRenderer/SvgQRCode")]
118+
public void can_render_svg_qrcode_with_png_logo_bitmap_without_background()
119+
{
120+
//Create QR code
121+
var gen = new QRCodeGenerator();
122+
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
123+
124+
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
125+
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
126+
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15, false);
127+
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
128+
129+
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
130+
131+
var result = HelperFunctions.StringToHash(svg);
132+
result.ShouldBe("f221b2baecc2883f8e8ae54f12ba701b");
133+
}
134+
135+
[Fact]
136+
[Category("QRRenderer/SvgQRCode")]
137+
public void can_render_svg_qrcode_with_png_logo_bitmap_without_quietzones()
138+
{
139+
//Create QR code
140+
var gen = new QRCodeGenerator();
141+
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
142+
143+
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
144+
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
145+
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
146+
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
147+
148+
var svg = new SvgQRCode(data).GetGraphic(10, Color.Black, Color.White, drawQuietZones: false, logo: logoObj);
149+
150+
var result = HelperFunctions.StringToHash(svg);
151+
result.ShouldBe("8b4d114136c7fd26e0b34e5a15daac3b");
152+
}
125153
#endif
126154

127155
[Fact]
@@ -133,7 +161,7 @@ public void can_render_svg_qrcode_with_png_logo_bytearray()
133161
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
134162

135163
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
136-
var logoBitmap = System.IO.File.ReadAllBytes(GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
164+
var logoBitmap = System.IO.File.ReadAllBytes(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
137165
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
138166
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
139167

@@ -152,7 +180,7 @@ public void can_render_svg_qrcode_with_svg_logo_embedded()
152180
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
153181

154182
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
155-
var logoSvg = File.ReadAllText(GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
183+
var logoSvg = File.ReadAllText(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
156184
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20);
157185
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.SVG);
158186

@@ -171,7 +199,7 @@ public void can_render_svg_qrcode_with_svg_logo_image_tag()
171199
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
172200

173201
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
174-
var logoSvg = File.ReadAllText(GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
202+
var logoSvg = File.ReadAllText(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
175203
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20, iconEmbedded: false);
176204

177205
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);

0 commit comments

Comments
 (0)