При использовании System.Drawing.Common инициализатор типа для Gdip выдал исключение.
Создание API, который должен отправлять QR-код (строку в кодировке Base64) в качестве ответа. Я попробовал использовать библиотеки ZXing и System.Drawing.common для генерации QR-кода, а затем вернуть его в byte[], чтобы его можно было преобразовать в строку base64 для отправки в качестве ответа в .net API.
Самая первая причина — System.Drawing.Common поддерживается только в Windows. Мой API размещен на сервере Ubuntu. Вторая причина заключается в том, что я использую .net 8, с которым у system.Drawing.common возникают некоторые проблемы. Learn.microsoft.com/en-us/dotnet/core/compatibility/…





Специально для QR-кодов вы можете использовать QRCoder Nuget -> https://www.nuget.org/packages/QRCoder/
Ему не нужны внешние зависимости, и вы можете получить base64 непосредственно из результата.
QRCodeGenerator qrGenerator = new QRCodeGenerator();
var qrString = $"QR Code string - for other types like urls check the readme in the nuget";
QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrString, QRCodeGenerator.ECCLevel.Q);
PngByteQRCode qrCode = new PngByteQRCode(qrCodeData);
byte[] qrCodeAsPngByteArr = qrCode.GetGraphic(5); // --> also read the readme
string base64String = Convert.ToBase64String(qrCodeAsPngByteArr, 0, qrCodeAsPngByteArr.Length);
Это прямой вывод (png), который вы можете использовать (в качестве примера)
var base64Png = $"<img src='data:image/png;base64,{base64String}' />";
В качестве небрежного замечания я бы посоветовал вообще перестать использовать System.Drawing.Common. Пространство имен System.Drawing имеет некоторые серьезные проблемы при переходе на .NET 6+ и некоторые другие проблемы, связанные с .NET 5 (или более ранней версией). Для получения дополнительной информации прочтите блок «примечаний», выпущенный MS: https://learn.microsoft.com/en-us/dotnet/api/system.drawing?view=net-8.0 («красный» раздел должен дать достаточно информации).
Если вы хотите использовать рисование/изображение и т. д., обратите внимание на другие nugets, например https://www.nuget.org/packages/SixLabors.ImageSharp/ (но есть и другие).
«Я бы посоветовал вообще прекратить использовать System.Drawing.Common» — почему? (Нейтрально в этом отношении: просто подумать о хорошем ответе, содержащем это замечание, также должно быть обосновано для этого предложения)
Вы правы - я добавлю пояснение
Еще одно замечание: выбирая SixLabors: обратите внимание на их лицензирование. (Причина, по которой один из наших проектов уходит от него)
Есть ли причина, по которой вы не заинтересованы в исправлении этого исключения, а выбираете совершенно другой подход? Верно ли мое предположение о вашей цели?