---
lang: ja-jp
breaks: true
---
# 参考資料
> ASP.NET Core - Read OR Generate QR Code | Zxing.NET
> https://www.youtube.com/watch?v=JLCqxFPZckk
## プロジェクトを作成


## wwwroot/images を作成

## csproj
```xml=
・・・
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="3.0.1" />
<PackageReference Include="ZXing.Net" Version="0.16.9" />
<PackageReference Include="ZXing.Net.Bindings.ImageSharp.V2" Version="0.16.15" />
</ItemGroup>
・・・
```
## Controllers/HomeController.cs
```csharp=
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using QRCodeGenerateRead.Models;
using ZXing;
using ZXing.QrCode;
namespace QRCodeGenerateRead.Controllers;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IWebHostEnvironment _hostEnvironment;
public HomeController(ILogger<HomeController> logger, IWebHostEnvironment hostEnvironment)
{
_logger = logger;
_hostEnvironment = hostEnvironment;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Index(IFormCollection formCollection)
{
string? contents = formCollection["QRCodeString"];
if (string.IsNullOrEmpty(contents) == false)
{
var hints = new Dictionary<EncodeHintType, object>()
{
{ EncodeHintType.CHARACTER_SET, "UTF-8" }
};
var writer = new QRCodeWriter();
var resultBit = writer.encode(contents, ZXing.BarcodeFormat.QR_CODE, 200, 200, hints);
var matrix = resultBit;
int scale = 2;
using (var image = new Image<Rgba32>(matrix.Width * scale, matrix.Height * scale))
{
for (int x = 0; x < matrix.Height; x++)
{
for (int y = 0; y < matrix.Width; y++)
{
Color pixel = matrix[x, y] ? Color.Black : Color.White;
for (int i = 0; i < scale; i++)
{
for (int j = 0; j < scale; j++)
{
image[x * scale + i, y * scale + j] = pixel;
}
}
}
}
string webRootPath = _hostEnvironment.WebRootPath;
if (Directory.Exists(webRootPath + "/images") == false)
{
Directory.CreateDirectory(webRootPath + "/images");
}
await image.SaveAsPngAsync(webRootPath + "/images/QRCode.png");
ViewBag.URL = "/images/QRCode.png";
}
}
return View();
}
public IActionResult ReadQRCode()
{
string webRootPath = _hostEnvironment.WebRootPath;
var path = webRootPath + "/images/QRCode.png";
using (var image = Image.Load<Rgba32>(path))
{
LuminanceSource source = new ZXing.ImageSharp.ImageSharpLuminanceSource<Rgba32>(image);
var reader = new BarcodeReaderGeneric();
Result result = reader.Decode(source);
ViewBag.Text = result.Text;
}
return View("Index");
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
```
## View/Home/Index.cshtml
```html=
@{
ViewData["Title"] = "Home Page";
}
<br />
<form asp-controller="Home" asp-action="Index">
<div class="col-lg-12">Enter QR Code String</div>
<Br />
<div class="col-lg-12">
<textarea name="QRCodeString" id="QRCodeString" class="form-control"></textarea>
</div>
<br />
<br />
<div class="col-lg-12">
<input type="submit" value="Generate QR Code" class="btn btn-primary" />
</div>
<br />
<br />
</form>
@if (!string.IsNullOrEmpty(ViewBag.URL))
{
<div class="col-lg-12">
<img src="@ViewBag.URL" />
</div>
}
<div class="col-lg-12">
<a href="/Home/ReadQRCode">Read Image and show text</a>
</div>
@if (!string.IsNullOrEmpty(ViewBag.Text))
{
<div class="col-lg-12">
QR Code int Text -> @ViewBag.Text
</div>
}
```