diff options
Diffstat (limited to 'qrcode.cpp')
-rw-r--r-- | qrcode.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/qrcode.cpp b/qrcode.cpp new file mode 100644 index 0000000..da747a5 --- /dev/null +++ b/qrcode.cpp @@ -0,0 +1,37 @@ +#include "qrcode.h" + +#include <fmt/format.h> + +#include <qrcodegen/QrCode.hpp> + +#include <Magick++.h> + +using namespace qrcodegen; +using namespace Magick; + +void QRCode::init() +{ + Magick::InitializeMagick(NULL); +} + +std::string QRCode::getQRCode(const std::string& data) +{ + QrCode qrc {QrCode::encodeText(data.c_str(), QrCode::Ecc::MEDIUM)}; + + int size {qrc.getSize()}; + + Image image(fmt::format("{0}x{0}", size).c_str(), "white"); + image.type(GrayscaleType); + + for (int x = 0; x < size; x++) { + for (int y = 0; y < size; y++) { + image.pixelColor(x, y, qrc.getModule(x, y) ? "black" : "white"); + } + } + + image.magick("PNG"); + + Blob blob; + image.write(&blob); + return std::string{(char*)blob.data(), blob.length()}; +} |