Her QR oluşturucu varsayılan olarak sizin için bir kodlama modu seçer ve çoğu zaman bu varsayılan yeterlidir. Kontrol ihtiyacı duyduğunuz anda bu yeterlilik ortadan kalkar — bir ürün kodunun yanındaki sayısal bir kimlik, UTF‑8 olarak saklanmasını istemediğiniz bir Japonca metin bloğu veya her oluşturduğunuzda aynı baytları almanız gereken bir yük. Bu kılavuz, Python’da QR kod kodlama modlarını ayarlama işlemini açıkça nasıl yapacağınızı, Aspose.BarCode for Python via .NET kullanarak gösterir; böylece tek bir QR sembolü sayısal bir segment, alfanümerik bir segment, bayt segmenti ve Kanji segmenti taşıyabilir — her biri en uygun modda saklanır.

Aspose.BarCode, kendi API adlarında bu compaction modes öğelerini (QrExtCompactionMode) olarak adlandırır ve QR spesifikasyonu ise bunları encoding modes olarak adlandırır. İki isim altında aynı dört moda sahiptir ve bu kılavuz, spesifikasyon ve çoğu Python QR kütüphanesinin kullandığı terim olduğu için tüm metinde “encoding mode” terimini kullanır.

QR Kodlama Modlarının Sembol Boyutu ve Tarama Güvenilirliğini Etkilemesi

Bir QR kodunun fiziksel boyutu, yükünün ihtiyaç duyduğu bit sayısına bağlıdır ve karakter başına bit sayısı tamamen o segment için kullanılan kodlama moduna bağlıdır. Şartname, belirgin şekilde farklı yoğunluklara sahip dört veri modunu tanımlar:

ModKarakter kümesiDepolamaKarakter başına maliyet
SayısalRakamlar 0-910 bit başına 3 rakam3,33 bit
AlfasayısalRakamlar, büyük harf A-Z, boşluk, $%*+-./:11 bit başına 2 karakter5,5 bit
BaytGenellikle UTF-8 olan herhangi bir 8-bit veri8 bit başına 1 bayt8 bit
KanjiShift-JIS çift bayt karakterleri13 bit başına 1 karakter13 bit

30 basamaklı bir tanımlayıcı, sayısal modda yaklaşık 100 bit ve bayt modunda yaklaşık 240 bit maliyetlidir. Bu fark, sembolü birkaç QR sürümüne yükseltmek için genellikle yeterlidir ve daha yüksek bir sürüm, aynı basılı alanda daha fazla modül anlamına gelir — daha küçük modüller ve düşük çözünürlüklü kameralar, kavisli ambalajlar ve aşınmış etiketlerde daha düşük okuma oranı.

Otomatik mod seçimi çoğu yükü iyi bir şekilde işler. Verinizin şeklini bildiğiniz ve analizörün bilmediği durumlarda sınırlayıcı hale gelir: tek bir harfle bölünmüş uzun bir sayısal dizi, bayt modunun karakter başına üç UTF‑8 baytı harcayacağı Japonca metin veya kütüphane sürümleri arasında belirli bir çıktıyı istediğiniz sabit biçimli bir tanımlayıcı.

Modu Manuel Olarak Ayarlamanın Değerli Olduğu Durumlar

Mod değiştirme ücretsiz değildir. Her segment sınırı, QR sürümüne bağlı olarak sekiz ila onaltı bit arasında bir karakter sayısı alanı ek olarak dört bitlik bir mod göstergesi yazar. Bir yükü aşırı segmentlemek, jeneratörün karar vermesine izin vermekten daha büyük bir sembol üretebilir.

Modu açıkça ayarlamak şu durumlarda fayda sağlar:

  • Yük, uzun ve homojen diziler içerir — 40 basamaklı bir seri, bir Kanji paragrafı.
  • Japonca metni kodluyorsunuz ve bayt modunda 24 bit yerine karakter başına 13 bit Kanji modunu istiyorsunuz.
  • Regresyon testleri veya sağlama toplamı doğrulaması için yeniden üretilebilir, bayt olarak aynı çıktıya ihtiyacınız var.

Kısa yükler, birkaç karakterde bir tür değiştiren veriler veya otomatik analiz zaten iyi bir şekilde ele alan URL’ler için ek karmaşıklık genellikle değmez. Aşağıdaki ölçüm alt bölümü, hangi durumda olduğunuzu nasıl kontrol edeceğinizi gösterir.

QR Kodlama Modlarını Python’da Ayarlamanın İki Yolu

Aspose.BarCode aynı kodlanmış sonuca iki yol sunar ve kod yazmadan önce her iki yolun da neden mevcut olduğunu bilmek değerlidir.

QrExtCodetextBuilderSatır içi Genişletilmiş seçiciler
Mod ayarlamaEnum değerleriyle yöntem çağrılarıDizedeki ters eğik çizgi işaretleri
Yakalanan hatalarÇağrı noktasındaYalnızca çözümleme sırasında
Kaçış endişeleriYok\\ kaçış, veya ham dizeler
En uygunUygulama koduYapılandırmadan, bir veritabanından veya başka bir sistemden gelen kod metni

Builder varsayılan olarak daha iyidir. QrExtCompactionMode.NUMERIC ya mevcut olur ya da hemen bir AttributeError fırlatır, oysa bir dizede yanlış yazılmış \numm sessizce yük verisi haline gelir ve yalnızca birisi etiketi taradığında ortaya çıkar. Her iki yaklaşım da aynı QREncodeMode.EXTENDED üretici ayarını besler, bu yüzden aşağı akışta hiçbir şeyi değiştirmeden aralarında geçiş yapabilirsiniz.

Python’da QR Kod Kodlama Modlarını Ayarlama: Adım Adım

1. Kurulum ve Geliştirme Ortamını Hazırlama

Aspose.BarCode for Python via .NET, 50’den fazla semboloji (QR dahil) destekleyen, üretim, tanıma ve manipülasyon sağlayan çapraz platform bir kütüphanedir. PyPI’dan yükleyin:

pip install aspose-barcode-for-python-via-net

Sürümü doğrulayın, çünkü bu API’ler 26.6 veya daha yeni bir sürüm gerektirir:

pip show aspose-barcode

Ardından, içe aktarmanın çözüldüğünü doğrulayın. Paket bir .NET çalışma zamanına bağlanır, bu nedenle başarılı bir içe aktarım, diskteki dosyaların varlığından daha fazlasını söyler:

from aspose.barcode.generation import QREncodeMode, QrExtCompactionMode

print("Aspose.BarCode imported successfully.")
print("EXTENDED mode available:", hasattr(QREncodeMode, "EXTENDED"))
print("Encoding modes:", [m for m in dir(QrExtCompactionMode) if m.isupper()])

Output:

Aspose.BarCode imported successfully.
EXTENDED mode available: True
Encoding modes: ['ALPHA_NUMERIC', 'AUTO', 'BYTES', 'KANJI', 'NUMERIC']

Eğer EXTENDED eksikse, 26.6’dan daha eski bir sürüm kullanıyorsunuz ve devam etmeden önce yükseltmeniz gerekir.

Bir lisans dosyanız varsa, uygulama başlatıldığında, herhangi bir oluşturma veya tanıma çağrısından önce bir kez uygulayın:

from aspose.barcode import License

license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")

2. QrExtCodetextBuilder ile Her Segment İçin Kodlama Modunu Ayarlayın

QrExtCodetextBuilder sıralı bir segment listesi tutar. Her çağrı, verileri saklaması gereken kodlama modu ile birlikte ekler ve get_extended_codetext() bunları jeneratörün anlayacağı genişletilmiş biçim dizesine birleştirir.

  1. Oluşturma sınıflarını içe aktarın.
  2. Bir QrExtCodetextBuilder oluşturun.
  3. QrExtCompactionMode.NUMERIC ile sayısal bir segment ekleyin.
  4. QrExtCompactionMode.ALPHA_NUMERIC ile alfasayısal bir segment ekleyin.
  5. QrExtCompactionMode.BYTES ile bayt segmenti ekleyin.
  6. QrExtCompactionMode.KANJI ile Kanji segmenti ekleyin.
  7. Birleştirilmiş genişletilmiş kod metnini alın.
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
from aspose.barcode.generation import (
    BarcodeGenerator,
    EncodeTypes,
    QREncodeMode,
    QrExtCodetextBuilder,
    QrExtCompactionMode,
)

# Instantiate the Builder.
text_builder = QrExtCodetextBuilder()

# Numeric Segment — 3 Digits per 10 Bits.
text_builder.add_codetext_with_compaction_mode(
    QrExtCompactionMode.NUMERIC, "1234567"
)

# Alphanumeric Segment — Uppercase and Digits Only, 2 Characters per 11 Bits.
text_builder.add_codetext_with_compaction_mode(
    QrExtCompactionMode.ALPHA_NUMERIC, "ASPOSE2026"
)

# Byte Segment — Lowercase Forces Byte Mode, 8 Bits per Character.
text_builder.add_codetext_with_compaction_mode(
    QrExtCompactionMode.BYTES, "aspose2026"
)

# Kanji Segment — Shift-JIS Double-Byte Characters, 13 Bits Each.
text_builder.add_codetext_with_compaction_mode(
    QrExtCompactionMode.KANJI,
    "\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A",
)

# Assemble the Final Extended Codetext.
codetext = text_builder.get_extended_codetext()
print("Extended codetext:", repr(codetext))

Açıklama

  • Her add_codetext_with_compaction_mode çağrısı bir segment için kodlama modunu ayarlar. Sıra önemlidir — çözücü, eklediğiniz sırada segmentleri birleştirerek döndürür.
  • Alfanümerik küme kasıtlı olarak dar tutulmuştur: rakamlar, büyük harf A‑Z, boşluk ve $%*+-./:. Bu yüzden ASPOSE2026 alfanümerik moda uyar, ancak aspose2026 uymaz. Küçük harfler kümenin dışındadır, bu yüzden o segment BYTES kullanmalıdır. Küçük harfleri ALPHA_NUMERICe geçirmek, bu şekilde mod ayarlarken en yaygın yapılan hatadır.
  • Kanji segmenti \u3062 ve sonrasını kullanır; bunlar gerçek Kanji yerine hiragana karakterleridir. Kanji modu, kana da dahil olan Shift‑JIS çift bayt aralığını kapsar, bu yüzden bunlar her biri 13 bit olarak kodlanır; UTF‑8’de her biri için byte modunun harcayacağı 24 bitten daha azdır.
  • get_extended_codetext() jeneratörün EXTENDED modunda ayrıştırdığı dizeyi üretir. Bunu repr() ile yazdırmak bir kez yapmaya değerdir — size oluşturucunun yaydığı seçici sözdizimini gösterir, bu da bir sonraki alt bölümün elle yazdığı şeydir.

3. Kodlama Modunu Satır İçi Olarak Ayarlama, Builder Kullanılmadan

Kod metni Python kodunuzun dışından geldiğinde, her segmentin modunu doğrudan bir seçiciyle ayarlayabilirsiniz. Her ters eğik çizgiyle başlayan işaretçi, bir sonraki işaretçi ortaya çıkana kadar tüm karakterleri yönetir:

SeçiciModu ayarlar
\numSayısal
\alnumAlfanümerik
\byteByte, UTF-8
\kanjiKanji, Shift-JIS
\autoOtomatik mod seçimi
# Equivalent to the Builder Output Above, Written Directly.
codetext = (
    r"\num1234567"
    r"\alnumASPOSE2026"
    r"\byteaspose2026"
    "\\kanji\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A"
)

Note the escaping. Normal bir Python dizesinde, "\num" bir seçici değildir — bir satır sonu ve ardından um gelir. Raw string’ler (r"...") sorunu önler, ancak raw string aynı zamanda \u kaçışlarını da engeller; bu yüzden yukarıdaki Kanji satırı \\kanji içeren geleneksel bir dize kullanıyor. Bu kaçış tuzağı, bölüm 2’deki builder’ı tercih etmenin pratik argümanıdır.

4. EXTENDED Modunda QR Barkodu Oluştur

Segment başına ayarlanan modlar, jeneratöre bunları okuması söylenene kadar etkisizdir. QREncodeMode.EXTENDED kullanılmadığında, segment bilgisi göz ardı edilir ve seçici işaretçiler literal yük metni olarak kodlanır.

  1. EncodeTypes.QR ve genişletilmiş kod metniyle bir BarcodeGenerator oluşturun.
  2. encode_mode değerini QREncodeMode.EXTENDED olarak ayarlayın.
  3. Çözünürlüğü yapılandırın ve isteğe bağlı olarak hata düzeltme seviyesini ve kenar boşluğunu ayarlayın.
  4. Barkodu kayıpsız bir PNG olarak kaydedin.
# Create the QR Generator with the Extended Codetext.
gen = BarcodeGenerator(EncodeTypes.QR, codetext)

# Switch to EXTENDED Mode So the Per-Segment Modes Are Respected.
gen.parameters.barcode.qr.encode_mode = QREncodeMode.EXTENDED

# Render at Print Resolution Rather Than Upscaling Later.
gen.parameters.resolution = 300

# Save the Generated QR Code.
gen.save("extended_qr.png")

print("QR code generated and saved as extended_qr.png")

Açıklama

  • gen.parameters.barcode.qr.encode_mode = QREncodeMode.EXTENDED satırı segment ayrıştırmayı etkinleştirir. Bunu çıkardığınızda jeneratör, \num1234567... gerçek metnini içeren geçerli, taranabilir bir QR kodu üretir — bu yüzden sonraki alt bölüm varsaymak yerine doğrulamayı tercih eder.
  • gen.parameters.resolution = 300 baskı çözünürlüğünde render eder. Etiket yazıcıları veya ambalaj grafikleri için yönlendirilen semboller, son boyutta, sonradan ölçeklendirilmemeli; aksi takdirde modül kenarları yumuşar.
  • save kayıpsız bir PNG yazar. Herhangi bir 2D semboloji için JPEG’den kaçının — sıkıştırma artefaktları, çözücünün örneklediği modül ızgarasını bulanıklaştırır.

5. Kodlama Modunun Uygulandığını Doğrulayın

Başarılı oluşturma, per‑segment modlarının etkili olup olmadığını kanıtlamaz. Çözümleme adımı, doğru kodlanmış bir sembolü veri olarak seçici işaretleri taşıyan bir sembolden ayıran şeydir.

  1. Dosya yolu ve DecodeType.QR ile bir BarCodeReader başlatın.
  2. Sonuçları somutlaştırın, böylece başarısız okuma görülebilsin.
  3. Kodlanmış metni beklenen birleştirme ile karşılaştırın.
EXPECTED = (
    "1234567"
    "ASPOSE2026"
    "aspose2026"
    "\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A"
)

# Initialise the QR Code Reader.
reader = BarCodeReader("extended_qr.png", DecodeType.QR)
results = list(reader.read_bar_codes())

if not results:
    raise ValueError("No QR code was detected in extended_qr.png.")

for result in results:
    decoded = result.code_text
    print("BarCode CodeText:", decoded)

if "\\num" in decoded or "\\alnum" in decoded:
        print("Selectors were encoded literally — check that encode_mode is EXTENDED.")
    elif decoded == EXPECTED:
        print("Verified: all four segments decoded and concatenated as expected.")
    else:
        print("Mismatch. Expected:", EXPECTED)

Açıklama

  • DecodeType.QR tanıma işlemini yalnızca QR sembollerine kısıtlar, bu da tüm desteklenen sembolleri taramaktan daha hızlıdır ve hatalı bir sembolün başka bir şey olarak çözümlenmesini önler.
  • list(...) hata durumunu açık hale getirir. Tanıma hatası bir istisna fırlatmak yerine boş bir yineleyici döndürür, bu yüzden başarısız bir okuma üzerinde korumasız bir for döngüsü sessizce sona erer ve başarılı gibi okunur.
  • Literal bir \num kontrolü, bu iş akışındaki en yaygın hatayı yakalar: segmentleri doğru ayarlayıp encode_mode ayarlamayı unutmak.
  • Çözülen yük, kodlama sırasında tüketilen tüm mod bilgileriyle birlikte ham segmentlerin birleştirilmiş halidir. Kodlama modları kodlayıcıya verilen talimatlardır, verinin bir parçası değildir.

6. Manuel Olarak Mod Ayarlamanın Yardımcı Olup Olmadığını Ölçün

Kodlama modunu manuel olarak ayarlamak bir optimizasyondur, bu yüzden varsaymak yerine ölçüm yapın. Aynı yükü her iki şekilde de oluşturup karşılaştırın:

RAW = "1234567ASPOSE2026aspose2026"

# Automatic Mode Selection.
auto = BarcodeGenerator(EncodeTypes.QR, RAW)
auto.save("qr_auto.png")

# Manually Set Modes per Segment.
builder = QrExtCodetextBuilder()
builder.add_codetext_with_compaction_mode(QrExtCompactionMode.NUMERIC, "1234567")
builder.add_codetext_with_compaction_mode(QrExtCompactionMode.ALPHA_NUMERIC, "ASPOSE2026")
builder.add_codetext_with_compaction_mode(QrExtCompactionMode.BYTES, "aspose2026")

manual = BarcodeGenerator(EncodeTypes.QR, builder.get_extended_codetext())
manual.parameters.barcode.qr.encode_mode = QREncodeMode.EXTENDED
manual.save("qr_manual.png")

print("Compare qr_auto.png and qr_manual.png — count modules along one edge.")

Her görüntünün bir kenarı boyunca modülleri sayın. Bir QR sürüm n sembolü 17 + 4n modül kare şeklindedir, bu yüzden sürüm 2, 25×25 ve sürüm 3, 29×29’dur. İkisi de aynı sürüme düşerse, otomatik analiz zaten optimal segmentasyonu bulmuş ve modu manuel olarak ayarlamak kazanç sağlamadan bakım yükü oluşturmuştur. Bunu gönderimden önce keşfetmek faydalı bir sonuçtur, boşa bir adım değildir.

Ücretsiz Lisans Al

Aspose, değerlendirme kısıtlamalarını kaldıran ve test için tam işlevselliği açan geçici ücretsiz bir lisans sunar. Bu lisansı, Aspose geçici lisans sayfası adresinden talep edin ve herhangi bir oluşturma veya tanıma çağrısı yapmadan önce uygulayın.

Ücretsiz Ek Kaynaklar

Sonuç

Python’da QR kod kodlama modlarını ayarlamak iki soruya indirgenir: hangi segmentin hangi modu alacağı ve jeneratöre bu seçimi nasıl uygulayacağınız. QrExtCodetextBuilder ve QrExtCompactionMode ilk soruya uygulama kodunda yanıt verir; QREncodeMode.EXTENDED ise ikinci soruya jeneratörde yanıt verir. Bu kılavuz, hem oluşturucu API’sini hem de ürettiği satır içi seçici sözdizimini kapsadı, dört segmentli bir QR sembolü oluşturdu, çözülen yükü doğruladı ve otomatik moda göre boyut farkını ölçtü.

Uygulama kodu için oluşturucuyu tercih edin — hataları tarayıcıda değil, çağrı noktasında yakalar. Ölçüm adımını da tutun. Modu manuel olarak ayarlamak, uzun homojen yüklerde gerçek bir kazanç sağlarken, kısa karışık yüklerde mod değiştirme ek yükü tasarrufu aşar ve net bir kayıp olur. İkisini de oluşturun, modül sayılarını karşılaştırın ve sonucu hangi kodu koruyacağınıza karar vermek için kullanın.

FAQs

  1. QR kodu kodlama modu nedir ve neden birini kullanmalıyım? Bir kodlama modu, QR oluşturucusuna bir veri segmentini — sayısal, alfanümerik, bayt veya Kanji — nasıl işleyeceğini söyler. Her modun veri yoğunluğu farklıdır, bu yüzden segment başına doğru modu seçmek QR sürümünü ve dolayısıyla sembolü mümkün olduğunca küçük tutar. Aspose.BarCode bu modlara sıkıştırma modları adını verir; QR spesifikasyonu ise onlara kodlama modları der.

  2. QrExtCompactionMode hangi kodlama modlarını destekler? QrExtCompactionMode NUMERIC, ALPHA_NUMERIC, BYTES ve KANJI sağlar, ISO/IEC 18004’te tanımlanan dört QR veri moduna eşleşir.

  3. QrExtCodetextBuilder mı yoksa satır içi EXTENDED seçicileri mi modu ayarlamak için kullanılmalı? Uygulama kodu için builder’ı kullanın. Tip kontrolü yapılır, ters eğik çizgi kaçış hatalarından kaçınılır ve genişletilmiş kod metnini sizin için birleştirir. Satır içi seçiciler, kod metni yapılandırmadan, bir veritabanından veya builder’ı çağıramayan başka bir sistemden geldiğinde faydalıdır.

  4. EXTENDED kodlama modu standart QR kodlama modundan nasıl farklıdır? EXTENDED modu, kod metnini tüm dize üzerinde otomatik mod algılaması yapmak yerine, her biri kendi kodlama moduna sahip önceden tanımlanmış segmentler serisi olarak okur.

  5. Bir QR kodunun farklı bölümleri için farklı kodlama modları ayarlayabilir miyim? Evet. QrExtCodetextBuilder‘a birkaç segment ekleyin, her biri farklı bir QrExtCompactionMode ile, ve oluşturucu hepsini kapsayan tek bir genişletilmiş kod metni üretir.

  6. Karışık kodlama modlarıyla oluşturulan bir QR kodu, standart okuyucularla uyumlu mu? Evet. Çok segmentli kodlama, QR spesifikasyonunun bir parçasıdır, bu nedenle uyumlu herhangi bir tarayıcı yükü doğru bir şekilde çözer ve birleştirilmiş veriyi döndürür.

  7. Kodlama modunu manuel olarak ayarlamak her zaman daha küçük bir QR kodu üretir mi? Hayır. Her segment sınırı bir mod göstergesi ve bir karakter sayısı alanı maliyetine sahiptir, bu yüzden veriyi birçok kısa segmente bölmek sembolü daha büyük yapabilir. Manuel mod seçimi, uzun ve homojen sayısal veya Kanji verileri için faydalıdır.

  8. QR kodlama modlarını QrExtCodetextBuilder ile ayarlamak için bir lisansa ihtiyacım var mı? API’yi lisans olmadan değerlendirebilirsiniz, ancak değerlendirme kısıtlamalarına tabidir. Aspose web sitesinden alınan ücretsiz geçici bir lisans, test sırasında bu kısıtlamaları kaldırır ve üretim kullanımı tam bir lisans gerektirir.

  9. Bu API’leri hangi Aspose.BarCode for python-net sürümü destekliyor? QrExtCodetextBuilder, QrExtCompactionMode ve QREncodeMode.EXTENDED Aspose.BarCode for Python via .NET 26.6 ve sonraki sürümlerde mevcuttur.

Devamını Oku