การสร้างบาร์โค้ด GS1QR นั้นง่ายจนกระทั่งข้อมูลภายในมีตัวคั่นกลุ่ม (Group Separator) ตัวอักษรที่ไม่สามารถพิมพ์ได้ตัวเดียวนี้, ASCII 29, เป็นสิ่งที่บอกสแกนเนอร์ว่าฟิลด์ตัวระบุแอปพลิเคชัน (Application Identifier) ที่มีความยาวแปรผันจบที่ไหน นักพัฒนาจึงต้องหาวิธีแก้โดยการประกอบไบต์ด้วยตนเอง, ใช้ตัวเข้ารหัสแบบกำหนดเอง, หรือแยกข้อมูลออกเป็นส่วน ๆ และทุกวิธีแก้เหล่านั้นต่างมีความเสี่ยงที่จะทำให้สัญลักษณ์สามารถสแกนได้แต่ไม่สามารถแปลความหมายได้.
Aspose.BarCode for Python via .NET 26.6 แก้ไขปัญหานั้นด้วยแฟล็กเดียว. คุณสมบัติ encode_gs1_separator_in_byte_mode บังคับให้ตัวเข้ารหัส QR เขียนตัวคั่นกลุ่ม GS1 และอักขระ % เป็นไบต์ดิบ, รักษาโครงสร้าง GS1 อย่างแม่นยำ. บทเรียนนี้ครอบคลุมกระบวนการทำงานเต็มรูปแบบของการสร้างและการจดจำบาร์โค้ดใน python-net: การติดตั้ง SDK, การสร้างสัญลักษณ์ GS1QR ที่สอดคล้อง, และการตรวจสอบในระดับจุดโค้ดว่าตัวคั่นยังคงอยู่หลังการเดินทางรอบ.
ทำไมตัวคั่น GS1 แบบ Byte-Mode ถึงสำคัญสำหรับบาร์โค้ด GS1QR
GS1QR เป็นพาหะสองมิติที่ได้รับความนิยมในห่วงโซ่อุปทาน, การดูแลสุขภาพ, และการค้าปลีก, ซึ่งสัญลักษณ์เดียวต้องบรรจุตัวระบุผลิตภัณฑ์, หมายเลขล็อต, วันหมดอายุ, และหมายเลขซีเรียลในข้อมูลที่มีโครงสร้างเดียวกัน. ไวยากรณ์ GS1 Application Identifier ทำให้สิ่งนี้เป็นไปได้, แต่จะพึ่งพา Group Separator เพื่อแยกฟิลด์ที่ความยาวไม่คงที่.
พิจารณาข้อมูล payload ที่รวม AI (10) สำหรับหมายเลขล็อตและ AI (21) สำหรับหมายเลขซีเรียล ทั้งสองเป็นความยาวแบบเปลี่ยนแปลงได้ ดังนั้นสแกนเนอร์จึงต้องการขอบเขตที่ชัดเจนระหว่างพวกมัน หากไม่มีตัวคั่นที่เข้ารหัสอย่างถูกต้อง ระบบด้านล่างจะอ่านเป็นสตริงที่ต่อเนื่องเป็นหนึ่งเดียวแทนสองฟิลด์ แถบบาร์โค้ดสแกนสำเร็จแต่ยังคงส่งข้อมูลที่ผิดพลาด ซึ่งเป็นความล้มเหลวที่แย่ที่สุด เพราะไม่มีอะไรในเหตุการณ์สแกนบ่งบอกปัญหา
การเข้ารหัสแบบไบต์โมดช่วยแก้ปัญหานี้ตั้งแต่ต้นแหล่งข้อมูล ตัวเข้ารหัสจะหยุดการตีความตัวคั่นเป็นเครื่องหมายโครงสร้างและเขียนมันโดยตรงลงในส่วนข้อมูล ประโยชน์เชิงปฏิบัตสำหรับนักพัฒนา Python นั้นตรงไปตรงมา:
- การปฏิบัติตาม. สัญลักษณ์ที่สร้างขึ้นตรงกับข้อกำหนดทั่วไปของ GS1 มากกว่าการประมาณค่า
- โค้ดที่ง่ายขึ้น. ไม่มีการประกอบไบต์ด้วยตนเอง, ไม่มีคลาสย่อยของตัวเข้ารหัสที่กำหนดเอง, ไม่มีขั้นตอนการประมวลผลหลัง
- ความสามารถในการทดสอบ. การวนกลับสามารถตรวจสอบได้ในหน่วยทดสอบโดยการอ้างอิงจุดรหัสที่ถอดรหัสแล้ว
การสร้างบาร์โค้ด GS1QR ด้วย Aspose.BarCode for Python
Aspose.BarCode for Python via .NET ให้ API ระดับสูงสำหรับการสร้างและการจดจำบาร์โค้ดทั้งสองแบบ ติดตั้งได้จาก PyPI:
pip install aspose-barcode-for-python-via-net
สองคลาสทำงานส่วนใหญ่ BarcodeGenerator, จาก aspose.barcode.generation, สร้างและเรนเดอร์สัญลักษณ์. BarCodeReader, จาก aspose.barcode.barcoderecognition, ถอดรหัสสัญลักษณ์เหล่านั้น. การตั้งค่าการสร้างสามารถเข้าถึงได้ผ่านต้นไม้พารามิเตอร์บนอินสแตนซ์ของเจนเนอเรเตอร์, โดยตัวเลือกที่เฉพาะเจาะจงของสัญลักษณ์เช่นการตั้งค่า QR อยู่ภายใต้ parameters.barcode.qr.
เอกสารอ้างอิงพร้อมใช้งานบน หน้าผลิตภัณฑ์, ไซต์เอกสาร, และ อ้างอิง API.
หากคุณมีไฟล์ใบอนุญาต ให้ใช้มันหนึ่งครั้งเมื่อตัวแอปพลิเคชันเริ่มทำงาน ก่อนการเรียกใช้การสร้างหรือการจดจำใด ๆ:
from aspose.barcode import License
license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")
สร้างบาร์โค้ด GS1QR ด้วยตัวคั่นโหมดไบต์
- นำเข้าชนิดที่จำเป็น -
BarcodeGeneratorและEncodeTypesสำหรับการสร้าง,BarCodeReaderและDecodeTypeสำหรับการตรวจสอบ. - สร้างอินสแตนซ์
BarcodeGeneratorด้วยEncodeTypes.GS1QRและสตริง payload ของ GS1. วงเล็บแสดงส่วน AI เช่น(10)ASPOSE2001(21)ASPOSE2026. - เปิดใช้งานการเข้ารหัสตัวคั่นแบบไบต์โมด โดยตั้งค่า
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True. - ตั้งค่าความละเอียดของเอาต์พุต เพื่อให้สัญลักษณ์ที่เรนเดอร์สามารถใช้ได้ทั้งในการพิมพ์และบนหน้าจอ.
- บันทึกรูปภาพ เป็นรูปแบบที่ไม่มีการสูญเสียคุณภาพ, จากนั้นอ่านกลับมาเพื่อยืนยันการเข้ารหัส.
ตัวอย่างต่อไปนี้แสดงกระบวนการทำงานทั้งหมด:
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
from aspose.barcode.generation import BarcodeGenerator, EncodeTypes
# 1. Create a GS1QR Barcode with Sample AI Data
# (10) = Batch or Lot Number, (21) = Serial Number
gen = BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")
# 2. Turn on Byte-Mode Encoding for GS1 Group Separators
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True
# 3. Set a Print-Ready Resolution
gen.parameters.resolution = 300
# 4. Save the Barcode to a PNG File
gen.save("gs1qr_test.png")
# 5. Verify by Reading the Barcode Back
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
for result in reader.read_bar_codes():
print("BarCode CodeText: " + result.code_text)
วิธีการทำงาน
BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")สร้างตัวสร้างที่กำหนดค่ามาสำหรับสัญลักษณ์ GS1QR. Payload ใช้ไวยากรณ์ GS1, โดยที่(10)คือ AI ของ Batch หรือ Lot Number และ(21)คือ AI ของ Serial Number. ไลบรารีจะวิเคราะห์รูปแบบที่อยู่ในวงเล็บและแทรกตัวคั่นตามที่สเปคกำหนด.gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = Trueเปิดใช้งานตัวเลือกที่แนะนำในเวอร์ชัน 26.6. เมื่อเปิดใช้งาน ตัวเข้ารหัสจะเขียน group separator และ%เป็นไบต์ดิบในส่วนข้อมูลแทนที่จะตีความ.gen.parameters.resolution = 300ทำการเรนเดอร์ที่ 300 DPI. สัญลักษณ์ที่ใช้บนหน้าจอเท่านั้นก็พอใช้ค่าตั้งต้น, แต่สิ่งที่ต้องการพิมพ์บนเครื่องพิมพ์ฉลากหรืองานออกแบบบรรจุภัณฑ์ควรสร้างที่ความละเอียดการพิมพ์แทนการขยายขนาดภายหลัง.gen.save("gs1qr_test.png")เขียนไฟล์ PNG แบบ lossless, รักษาลวดลายโมดูลที่แม่นยำ. สิ่งนี้สำคัญมากกว่าสำหรับสัญลักษณ์ 2D มากกว่าสัญลักษณ์ 1D, เนื่องจากตัวถอดรหัส QR จะสุ่มตัวอย่างกริดและไม่ยอมรับขอบโมดูลที่เบลอ.read_bar_codes()คืนค่าเป็น iterable ของอ็อบเจ็กต์BarCodeResult, และresult.code_textเก็บ payload ที่ถอดรหัสรวมถึงอักขระควบคุมใด ๆ. ในคอนโซล, ตัวคั่นจะแสดงเป็นไม่มีอะไรเลย, ซึ่งเป็นเหตุผลที่ส่วนต่อไปตรวจสอบ code points แทนที่จะเชื่อถือผลลัพธ์ที่พิมพ์ออกมา.
อ่านและตรวจสอบบาร์โค้ดที่สร้างขึ้น
การพิมพ์สตริงที่ถอดรหัสแล้วพิสูจน์ว่าตัวอักษรสามารถอ่านได้ ไม่ได้หมายความว่าถูกต้อง เนื่องจากตัวคั่นกลุ่มเป็นอักขระที่ไม่สามารถพิมพ์ได้ ดังนั้น payload ที่ขาดตัวคั่นและ payload ที่มีตัวคั่นที่ถูกต้องจะดูเหมือนกันในเทอร์มินัล การตรวจสอบต้องทำในระดับจุดโค้ด ซึ่งทำให้การยืนยันในชุดทดสอบเป็นเรื่องง่าย
ขั้นตอน
- โหลดไฟล์ PNG ที่บันทึกไว้ด้วย
BarCodeReaderและDecodeType.GS1QR - วนซ้ำผลลัพธ์ที่ถอดรหัสแล้ว
- ตรวจสอบจุดรหัส Unicode ของแต่ละอักขระเพื่อค้นหา
U+001D - แยก payload ด้วยตัวคั่นและเปรียบเทียบฟิลด์กับข้อมูลต้นฉบับ
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
GROUP_SEPARATOR = "\x1d"
# Load the Barcode Image Generated Earlier
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
results = list(reader.read_bar_codes())
if not results:
raise ValueError("No GS1QR barcode was detected in the image.")
for result in results:
decoded = result.code_text
print("Decoded GS1QR payload:", decoded)
# Inspect the Code Point of Every Character
for index, char in enumerate(decoded):
label = repr(char) if char.isprintable() else "<non-printable>"
print(f"Char {index}: {label} (U+{ord(char):04X})")
# Confirm the Separator Survived the Round Trip
if GROUP_SEPARATOR in decoded:
fields = decoded.split(GROUP_SEPARATOR)
print(f"Separator found. Payload splits into {len(fields)} field(s):")
for field in fields:
print(" -", field)
else:
print("Warning: no group separator present in the decoded payload.")
วิธีการทำงาน
- การกำหนดค่าผู้อ่านด้วย
DecodeType.GS1QRจะจำกัดการจดจำไว้ที่สัญลักษณ์นั้นเท่านั้น ซึ่งทำให้เร็วและปลอดภัยกว่าการสแกนทุกประเภท เนื่องจากมันป้องกันไม่ให้สัญลักษณ์ที่ผิดรูปถูกถอดรหัสเป็น QR ธรรมดาและผ่านอย่างเงียบๆ - การแปลงผลลัพธ์เป็น
list(...)ก่อนตรวจสอบทำให้กรณีที่ว่างชัดเจน การจดจำที่ล้มเหลวจะคืนค่า iterable ที่ว่างแทนการโยนข้อผิดพลาด ดังนั้นลูปforที่ไม่มีการป้องกันเหนือการอ่านที่ล้มเหลวจะทำงานเสร็จโดยเงียบและรายงานว่าประสบความสำเร็จ - ลูปโค้ดพอยต์เป็นการตรวจสอบจริง การเห็น
U+001Dในผลลัพธ์ยืนยันว่าโหมดไบต์ทำงานได้; หากไม่มีหมายความว่าตัวคั่นถูกตัดออกหรือแปลงรูปแบบ ไม่ว่า payload ที่พิมพ์ออกมาจะดูสะอาดแค่ไหนก็ตาม - การแยกด้วย
\x1dจะสร้างฟิลด์ AI แต่ละตัวขึ้นใหม่ ทำให้คุณได้ค่าที่สามารถเปรียบเทียบกับข้อมูลต้นทางใน pipeline ของ CI ได้
รับใบอนุญาตฟรี
Aspose มีใบอนุญาตฟรีชั่วคราวที่ลบลายน้ำการประเมินและเปิดใช้งานฟังก์ชันเต็มสำหรับการทดสอบ. ขอรับได้จาก หน้าใบอนุญาตชั่วคราวของ Aspose.
แหล่งข้อมูลเพิ่มเติมฟรี
สรุป
ตัวเลือก encode_gs1_separator_in_byte_mode แทนที่กลุ่มของการจัดการไบต์ด้วยมือด้วยบูลีนเดียว ตั้งค่าให้เปิดบนพารามิเตอร์ QR และตัวคั่นกลุ่ม GS1 พร้อมกับอักขระ % จะถูกเขียนลงในสัญลักษณ์ตามที่สเปคกำหนดอย่างแม่นยำ.
บทแนะนำนี้ครอบคลุมการติดตั้ง, การสร้างสัญลักษณ์ GS1QR ด้วยตัวคั่นแบบไบต์โมด, และการตรวจสอบผลลัพธ์ในระดับจุดโค้ดแทนการเชื่อถือผลลัพธ์จากคอนโซล. ขั้นตอนการตรวจสอบนี้เป็นส่วนที่คุ้มค่าที่สุดในการเก็บรักษา. ในกระบวนการทำงานของ GS1, บาร์โค้ดที่สแกนได้ไม่เท่ากับบาร์โค้ดที่ถูกต้อง, และการยืนยันจุดโค้ดในชุดทดสอบของคุณคือสิ่งที่แยกความแตกต่างระหว่างสองอย่างก่อนที่ฉลากจะเข้าสู่การผลิต.
คำถามที่พบบ่อย
ตัวเลือก encode_gs1_separator_in_byte_mode ทำหน้าที่อะไร? มันสั่งให้ตัวเข้ารหัส QR ส่งตัวคั่นกลุ่ม GS1 (ASCII 29) และอักขระ
%เป็นข้อมูลไบต์ดิบแทนที่จะถือว่าเป็นเครื่องหมายโครงสร้าง ทำให้พวกมันคงอยู่โดยไม่เปลี่ยนแปลงในข้อมูลบาร์โค้ดฉันต้องการใบอนุญาตพิเศษเพื่อใช้ฟีเจอร์ GS1QR หรือไม่? GS1QR เป็นส่วนหนึ่งของไลบรารี Aspose.BarCode มาตรฐาน คุณสามารถประเมินได้โดยไม่ต้องใช้ใบอนุญาต และขอรับใบอนุญาตชั่วคราวฟรีจากเว็บไซต์ Aspose เพื่อเอาน้ำตราประเมินออก
ฉันสามารถใช้ฟีเจอร์นี้กับประเภท QR code อื่นได้หรือไม่? ไม่. ธงนี้ใช้กับประเภทการเข้ารหัส GS1QR เท่านั้น. ตัวเข้ารหัส Standard QR และ Micro QR จะละเลยมัน เนื่องจากการแยกวิเคราะห์ GS1 Application Identifier ไม่ได้ใช้กับพวกมัน.
ภาพบาร์โค้ดที่สร้างขึ้นเป็นแบบ lossless หรือไม่?
การบันทึกเป็น PNG ซึ่งเป็นค่าเริ่มต้น จะสร้างภาพแบบ lossless ที่รักษารูปแบบโมดูลอย่างแม่นยำ หลีกเลี่ยงการใช้ JPEG สำหรับบาร์โค้ด เนื่องจากศิลปะการบีบอัดของมันทำให้ขอบโมดูลเบลอและลดอัตราการอ่าน.ฉันจะตรวจสอบว่าแยกตัวอักษรถูกเข้ารหัสอย่างถูกต้องหรือไม่? อ่านภาพกลับด้วย
BarCodeReaderโดยใช้DecodeType.GS1QRและตรวจสอบจุดโค้ดของสตริงที่ถอดรหัสแล้วU+001Dใน payload ยืนยันว่า group separator ถูกเข้ารหัสในโหมดไบต์การเปิดใช้งานโหมดไบต์มีผลต่อขนาดบาร์โค้ดหรือไม่? โหมดไบต์อาจต้องการบิตข้อมูลมากกว่าโหมดอัลฟานูเมอริก ซึ่งอาจทำให้สัญลักษณ์ต้องใช้ QR เวอร์ชันที่ใหญ่ขึ้น ไลบรารีจะเลือกเวอร์ชันที่เล็กที่สุดที่พอใส่โดยอัตโนมัติ ดังนั้นการเพิ่มขนาดมักจะเพิ่มเพียงขั้นตอนเวอร์ชันเดียวเท่านั้น
เวอร์ชันใดของ Aspose.BarCode ที่แนะนำตัวเลือกนี้?
encode_gs1_separator_in_byte_modeproperty ถูกเพิ่มใน Aspose.BarCode for Python via .NET 26.6. เวอร์ชันก่อนหน้านี้ต้องทำการจัดการไบต์ด้วยตนเองเพื่อฝังตัวคั่นกลุ่ม.
