diff --git a/natives/image/qr.cc b/natives/image/qr.cc index ecef8b64..8c5e902a 100644 --- a/natives/image/qr.cc +++ b/natives/image/qr.cc @@ -1,11 +1,18 @@ #ifdef ZXING_ENABLED +#include +#include + +#if ZXING_VERSION_MAJOR >= 3 +#include +#include +#else #include #include -#include -#include #if ZXING_VERSION_MAJOR < 2 #include #endif +#endif + #include #include "common.h" @@ -18,6 +25,11 @@ CmdOutput esmb::Image::QrCreate([[maybe_unused]] const string &type, string &out [[maybe_unused]] bool *shouldKill) { string text = GetArgument(arguments, "text"); +#if ZXING_VERSION_MAJOR >= 3 + ZXing::Barcode barcode = ZXing::CreateBarcodeFromText(text, ZXing::CreatorOptions(ZXing::BarcodeFormat::QRCode, "eci=26")); + ZXing::Image bitmap = ZXing::WriteBarcodeToImage(barcode, ZXing::WriterOptions().addQuietZones(true)); + size_t bitmapSize = bitmap.width() * bitmap.height() * bitmap.pixStride(); +#else auto writer = ZXing::MultiFormatWriter(ZXing::BarcodeFormat::QRCode).setMargin(1).setEncoding(ZXing::CharacterSet::UTF8); @@ -27,8 +39,10 @@ CmdOutput esmb::Image::QrCreate([[maybe_unused]] const string &type, string &out ZXing::BitMatrix matrix = writer.encode(ZXing::TextUtfEncoding::FromUtf8(text), 0, 0); #endif ZXing::Matrix bitmap = ZXing::ToMatrix(matrix); + size_t bitmapSize = bitmap.size(); +#endif - vips::VImage img = vips::VImage::new_from_memory(const_cast(bitmap.data()), bitmap.size(), + vips::VImage img = vips::VImage::new_from_memory(const_cast(bitmap.data()), bitmapSize, bitmap.width(), bitmap.height(), 1, VIPS_FORMAT_UCHAR) .resize(4, vips::VImage::option()->set("kernel", VIPS_KERNEL_NEAREST));