.Net Core İle QR Kod Okuma

Merhaba Arkadaşlar,
Epey zamandır bir makale yazamıyordum iş yoğunluğundan kaynaklı. Bu yüzden biraz daha işe yarar bir makale ile tekrar giriş yapmak istedim. Umarım sizin için de faydalı bir yazı olur.

QR Kod Nedir?

İngilizcedeki Quick Response kelimelerinin baş harlerinden oluşan bir görsel kod dizaynıdır. Aslında ülkemizde de çok uzun zamandır kullanımı çok yaygın olan barkodların (Barcode) bir farklı ve gelişmiş versiyonudur. Bildiğimiz üzere barkodlar ile çok karmaşık verileri saklamak mümkün değildi. Genelde sadece ürünü veya bir nesneyi, ona özel verilen bir kod ile tanımlayabiliyorduk. Ancak QR kodların gelişmesi ile bu mümkün hale geldi.

Aşağıdaki gibi bir QR kodu bir QR kod tarayıcısı veya telefonunuzun kamerası ile taradığınızda sonucun https://www.edomurcuk.com şeklinde olduğunu göreceksiniz.

QR Kod mu? QR Barkod mu?

Bu kısmı özellikle belirtmek istedim. Zira piyasada özellikle literatüre hakim olmayanlar tarafından bu hususta çok ciddi telaffuz hataları yapılabilmektedir. Yukarıda belirttiğim gibi QR kodlar, Barkodlardan faklı ve daha gelişmiş bir versiyondur. Dolayısı ile QR Barkod gibi bir terim söz konusu değildir. QR Kod ayrı, Barkod ayrıdır. 🙂

QR Kodlar Maksimum Boyutu Nedir?

7.089 adet sayısal veya 4.296 adet alfanümerik karakter saklanabilmektedir. Bu sebep ile oldukça gelişmiş bir veri depolama ve/veya sınıflandırma aracı olarak da kullanılabilmektedirler.

.Net Core da QR Kod Okuma Hangi Sınıf İle Yapacağız?

Bu uygulama örneği içerisinde gerçekten güzel de çalıştığını söyleyebileceğim QRCodeDecoder kütüphanesini kullanacağız. Kendisine vereceğimiz imajı (image) okuyup içerisindeki QR kodu ve içeriğini okumasını sağlayacağız.

.Net Core İle QR Kod Okuma Örneği

Şimdi dilerseniz kodumuza geçelim. Öncelikle projemizi açtıktan sonra nuget ile QRCodeDecoderLibrary aratıyoruz ve karşımıza gelen kütüphanemizi projemize ekliyoruz.

Öncelikle şundan bahsetmeliyim; Bu örneğimizde sınıfa vereceğimiz imaj Bitmap nesnesi olacak. Bu yüzden dilerseniz Bitmap ile ilgili bu yazıyı ve detaylarını okuyabilirsiniz.

Temel olarak üç metot ile işlemimizi yapıyor olacağız ve bu üç metodu da ReadQRCode isminde bir sınıf içerisinde yazıyor olacağız. Öncelikle aşağıdaki gibi ReadQRCode sınıfımızı boş bir şekilde oluşturalım.

    public class ReadQRCode
    {

    }

Şimdi de kodlarımızı yazalım ve metotlarımızı oluşturalım.

    public class ReadQRCode
    {
        public string ReadQRCodeWithBitmap(string ImageAddress)
        {
            string result = string.Empty;

            using (Bitmap QRCodeInputImage = new Bitmap(ImageAddress))
            {
                QRDecoder QRCodeDecoder = new QRDecoder();
                byte[][] DataByteArray = QRCodeDecoder.ImageDecoder(QRCodeInputImage);
                result = QRCodeResult(DataByteArray);
            }

            return result;

        }

        private static string QRCodeResult
                (
                byte[][] DataByteArray
                )
        {
            // QR kod yok
            if (DataByteArray == null) return string.Empty;

            // Bir QR kod var ise
            if (DataByteArray.Length == 1) return ForDisplay(QRDecoder.ByteArrayToStr(DataByteArray[0]));

            // Birden fazla QR kod var ise
            StringBuilder Str = new StringBuilder();
            for (int Index = 0; Index < DataByteArray.Length; Index++)
            {
                if (Index != 0) Str.Append("\r\n");
                Str.AppendFormat("QR Code {0}\r\n", Index + 1);
                Str.Append(ForDisplay(QRDecoder.ByteArrayToStr(DataByteArray[Index])));
            }
            return Str.ToString();
        }

        private static string ForDisplay(string Result)
        {
            int Index;
            for (Index = 0; Index < Result.Length && (Result[Index] >= ' ' && Result[Index] <= '~' || Result[Index] >= 160); Index++) ;
            if (Index == Result.Length) return Result;

            StringBuilder Display = new StringBuilder(Result.Substring(0, Index));
            for (; Index < Result.Length; Index++)
            {
                char OneChar = Result[Index];
                if (OneChar >= ' ' && OneChar <= '~' || OneChar >= 160)
                {
                    Display.Append(OneChar);
                    continue;
                }

                if (OneChar == '\r')
                {
                    Display.Append("\r\n");
                    if (Index + 1 < Result.Length && Result[Index + 1] == '\n') Index++;
                    continue;
                }

                if (OneChar == '\n')
                {
                    Display.Append("\r\n");
                    continue;
                }

                Display.Append('¿');
            }
            return Display.ToString();
        }
    }

Gördüğünüz üzere aslında bizim bu sınıfta kullanacağımız public metodumuz ReadQRCodeWithBitmap metodu.

Buraya vereceğimiz imajın yolundan çekilecek imaj bitmap objesine atanıyor ve daha sonra “QRDecoder” devreye alınıyor ve içeriğindeki data okunuyor.

Unutmamanız gereken; Yolunu vereceğiniz görsel içerisinde ne kadar karmaşık karakterler var ise o kadar okunması zor olacaktır. Bu yüzden mümkün olduğunca sade ve sadece QR kodun olduğu bir imaj vermeniz gerekmektedir.

0 0 votes
Article Rating
Subscribe
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments