이번에 작업을 진행하면서 특정 규칙에 의한 데이터를 QR코드로 대량 생성하는
기능이 필요했습니다.. 이미 QR코드로 만들어주는 사이트도 있고, 다른 여러 방법들이
나와있지만 이번에 구현해볼 내용은..
SHA-256 암호화 + QR코드 생성 + 대량 생성 + 생성된 QR이미지 저장
이 정도 기능들이 필요할 것 같다 QR코드 관련 기능은 생각 외로 필요한 곳이 많아서
한번 만들어보고 사용하다가 괜찮다 싶으면 에셋화 하여 공유할 수 있도록 해보겠습니다.
전에 리액트 네이티브로 작업할땐 진짜 바로 가져다가 사용해도 되는 라이브러리가 있었는데
유니티는 아무래도 그런 라이브러리는 없고 ZXinq라는 것을 알게 되었고 이걸 활용해 보겠습니다.
우선, 암호화고 머고 목표인 QR코드가 나와야 하니까 QR코드를 생성 기능을 우선 구현하겠습니다.
[QR코드 생성 구현]
참고한 블로그 : https://ryeggg.tistory.com/44
[Unity] Zxing을 이용한 QR코드 생성방법
*Unity 버전 : 2018.4.23f1 (64-bit) zxing.dll 파일을 다운받은 후 Plugins폴더에 임포트한다. using ZXing; using ZXing.QrCode; 를 추가해준다. RawImage를 생성해 이미지를 넣어주면 qr생성완료 + 저장법..
ryeggg.tistory.com
https://simpleneed.tistory.com/34
유니티 ZXing을 이용한 QRcode 생성
오늘은 유니티 내에서 QR코드를 생성하는 방법에 대해서 알아보았다. QR코드를 생성하기위해서는 먼저 zxing.dll 파일을 인포트 하여하 하는데, 그 방법은 이전 포스팅에서 확인 할 수 있으며 dll 파
simpleneed.tistory.com
1. Zxinq.dll파일을 프로젝트의 Assets 폴더로 임포트 합니다.
2. 우선 데이터를 인코드 하여 QR코드로 변환하는 코드를 만듭니다. (엄청 간단합니다 ㄹㅇ)
/// <summary>
/// QR코드 데이터 세팅 및 생성 함수
/// </summary>
/// <param name="data">QR코드에 들어갈 데이터</param>
/// <param name="width">QR코드 너비</param>
/// <param name="height">QR코드 높이</param>
/// <returns></returns>
private static Color32[] Encode(string data, int width, int height)
{
// 생성 기본 세팅
var writer = new BarcodeWriter
{
// 포맷은 QR코드
Format = BarcodeFormat.QR_CODE,
// 옵션 프로퍼티 설정
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width
}
};
return writer.Write(data);
}
4. 생성된 QR코드를 Texture2D 형태로 만드는 작업을 할 겁니다. (생성된 QR미리보기 및 저장용 / 시각화..?)
/// <summary>
/// 인코딩된 QR데이터를 Texture2D로 반환하는 함수
/// </summary>
/// <param name="dataStr">QR코드에 들어갈 데이터</param>
/// <param name="width">QR코드 너비</param>
/// <param name="height">QR코드 높이</param>
/// <returns></returns>
public static Texture2D CreateQRCode(string dataStr)
{
// 반환할 텍스쳐
var resultTex = new Texture2D(256,256);
// 인코드한 데이
var color = Encode(dataStr,resultTex.width,resultTex.height);
// 인코드한 데이터를 텍스쳐화
resultTex.SetPixels32(color);
resultTex.Apply();
return resultTex;
}
5. 이제 만든 QR코드 저장 할 차례네요
/// <summary>
/// 생성된 QR코드를 지정한 경로에 PNG형태로 저장하는 함수
/// </summary>
/// <param name="qrCode">생성된 QR코드</param>
/// <param name="path">저장할 경로</param>
/// <param name="fileName">저장할 파일 이름</param>
public static void Save(Texture2D qrCode, string path, string fileName)
{
try
{
// 저장할 경로 설정
string savePath = $"{path}/{fileName}.png";
Debug.Log($"Save Path : {savePath}");
// 바이트 형태로 QR코드를 PNG포맷으로 인코딩
byte[] bytes = qrCode.EncodeToPNG();
// 인코딩한 데이터를 경로에 저장
File.WriteAllBytes(savePath,bytes);
}
catch(System.Exception e)
{
Debug.Log($"Save Error : {e}");
}
}
위에 소개시켜드린 블로그의 코드에서 조금만 수정만 했지만 가장 중요한 부분은 이렇게 구현이 완료되었습니다.
다음번 글에서는 QR코드 생성에 들어가는 데이터를 SHA-256으로 암호화하는 기능을 구현하도록 하겠습니다.
[테스트]
private void Test()
{
SaveQRCode(CreateQRCode("TEST"),"C:/Users/user/Desktop","text");
}
Tip : 작업후 테스트할 때 width와 height를 다양한 값을 넣어 봤을 때 256이 제일 정상적으로 저장되었습니다.
Ex) 512 x 512