[C#] QR Code 이미지 생성 방법

반응형

✅ 1. NuGet 패키지 설치

Visual Studio에서 패키지 관리자 콘솔을 열고 다음 명령어 실행:

Install-Package QRCoder

✅ 2. 기본 QR 코드 생성 코드

using QRCoder;
using System.Drawing;
using System.Windows.Forms; // WinForms에서 PictureBox에 이미지 표시할 때

public class QRCodeGeneratorExample
{
    public static Bitmap GenerateQRCode(string text)
    {
        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
        QRCode qrCode = new QRCode(qrCodeData);
        Bitmap qrCodeImage = qrCode.GetGraphic(20); // 20은 픽셀 단위의 스케일
        return qrCodeImage;
    }
}

사용 예시:

string input = "https://www.example.com";
Bitmap qrImage = QRCodeGeneratorExample.GenerateQRCode(input);

// PictureBox에 표시하려면:
pictureBox1.Image = qrImage;

✅ 3. PNG/JPG로 저장하기

qrImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png);

✅ 4. WPF에서 사용하려면

WPF는 BitmapImage를 사용하므로 변환이 필요합니다.

public static BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap)
{
    using (MemoryStream memory = new MemoryStream())
    {
        bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Png);
        memory.Position = 0;

        BitmapImage bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.StreamSource = memory;
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.EndInit();

        return bitmapImage;
    }
}

 


✅ 5. 로고 포함 QR 코드 생성 예제

using QRCoder;
using System.Drawing;

public class QRWithLogo
{
    public static Bitmap GenerateQRCodeWithLogo(string qrText, Bitmap logo)
    {
        // 1. QR 코드 생성
        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrText, QRCodeGenerator.ECCLevel.Q); // ECCLevel을 높게 설정해야 오류 복원 가능
        QRCode qrCode = new QRCode(qrCodeData);
        Bitmap qrCodeImage = qrCode.GetGraphic(20, Color.Black, Color.White, true); // 20은 scale

        // 2. 로고 크기 조정 (QR의 15~20% 정도 권장)
        int logoSize = qrCodeImage.Width / 5;
        Bitmap resizedLogo = new Bitmap(logo, new Size(logoSize, logoSize));

        // 3. QR 중앙에 로고 삽입
        Graphics graphics = Graphics.FromImage(qrCodeImage);
        int x = (qrCodeImage.Width - resizedLogo.Width) / 2;
        int y = (qrCodeImage.Height - resizedLogo.Height) / 2;
        graphics.DrawImage(resizedLogo, x, y, resizedLogo.Width, resizedLogo.Height);
        graphics.Save();

        return qrCodeImage;
    }
}

✅ 6. 사용 예시

string text = "https://www.example.com";
Bitmap logo = (Bitmap)Image.FromFile("logo.png");

Bitmap qrWithLogo = QRWithLogo.GenerateQRCodeWithLogo(text, logo);
qrWithLogo.Save("qrcode_with_logo.png");

✅ 참고사항

  • 오류 복원 수준(ECCLevel.Q 이상): QR 코드의 중앙에 이미지가 들어가면 일부 영역이 가려지므로 오류 복원 수준을 높게 (Q, H) 설정해야 QR이 정상 인식됩니다.
  • 로고 비율: 일반적으로 전체 QR 이미지의 15~20% 이하 크기로 삽입해야 스캔 오류를 방지할 수 있습니다.
  • 투명 배경 PNG 사용 가능: .png 로고는 투명 배경을 유지한 채 삽입됩니다.

필요하시다면 WPF에서 사용하기 위한 BitmapImage 변환 코드나, 로고에 테두리/배경을 추가하는 방법도 도와드릴 수 있어요. 추가 요청 있으시면 말씀해주세요!

 


✅ 추가 옵션들 (색상 변경 등)

qrCode.GetGraphic(
    20,                        // scale
    Color.Black,               // foreground
    Color.White,               // background
    drawQuietZones: true       // 주변 여백 여부
);

✅ 기타 기능들

QRCoder는 다음 기능도 지원합니다:

  • WiFi QR 생성 (WiFiGenerator)
  • 이메일, 연락처, SMS, 위치, vCard 등
  • Base64 인코딩된 QR 이미지

 

 

반응형