Как конвертировать Byte [] созданный QRCodeGenerator в изображение

Для генерации QR coda использую библиотеку QRCoder. Генерирую данной библиотекой QR код и сохраняю его в виде Byte[] в базу данных MySQL (поле с типом mediumblob):

QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(QRtext, QRCodeGenerator.ECCLevel.Q);
Byte[] QRbytes = qrCodeData.GetRawData(QRCodeData.Compression.Uncompressed);

Получается массив как на картинке введите сюда описание изображения

Но когда потом я пытаюсь конвертировать данный Byte[] в изображение получается, что-то несуразное:

<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model.QRcodeBytes))" width="150" height="150" />

После некоторых экспериментов пришел к такому варианту - после того как мы сохранили qr код в виде байт массива в БД, для его корректного вывода в изображение восстановливаю снова объект QRCodeData из этого байт массива, затем из восстановленного объект QRCodeData генерирую Bitmap объект, а потом это Bitmap объект снова конвертирую в Byte[] и отправляю его на фронт, где генерирую изображение ))

public static Byte [] GenerateQRcodeFile(string fio, string dateBirth, string QRtext, string typeFile, string wayPath)
        {
            //Generates QR code files
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(QRtext, QRCodeGenerator.ECCLevel.Q);

            Byte[] QRbytes = qrCodeData.GetRawData(QRCodeData.Compression.Uncompressed);

          

           return QRbytes;
        }

        public static Bitmap CreateBitmapFromBytes(Byte[] bytesQRcode)
        {
            QRCodeData qrCodeDataSave = new QRCodeData(bytesQRcode, QRCodeData.Compression.Uncompressed);
            QRCode qrCode = new QRCode(qrCodeDataSave);
            Bitmap qrCodeImage = qrCode.GetGraphic(20);

            return qrCodeImage;
        }

        public static Byte[] BitmapToBytes(Bitmap img)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                return stream.ToArray();
            }
        }
QRcodeServices.BitmapToBytes(QRcodeServices.CreateBitmapFromBytes(friend.ByteQrcode))

В общем вариант такой себе, но другого пока не нашел. Подскажите кто знает, как это сделать проще и правильнее?


Ответы (1 шт):

Автор решения: Andrei Khotko
//Ваш код

var imgType = Base64QRCode.ImageType.Jpeg;
Base64QRCode qrCode = new Base64QRCode(qrCodeData);
string qrCodeImageAsBase64 = qrCode.GetGraphic(20,Color.Black, Color.White, true, imgType);

Источник: Wiki QRCoder (github)

→ Ссылка