เนื้อหาต่อไปนี้ จะแนะนำ PHP Barcode Generator ที่เป็น PHP Library ที่ใช้ในการสร้าง Barcode รองรับ
การสร้าง Barcode กว่า 30 รูปแบบ สามารถดูข้อมูลเพิ่มเติมด้วยตนเองได้ที่
เราจะติดตั้ง package มาใช้งานผ่าน composer และเนื่องจากว่าเราจะนำมาประยุกต์กับ การใช้งาน Intervention Image
จึงขอยกตัวอย่างมารวมไว้ใน PHP Project ทดสอบเดียวกันกับบทความด้านล่างนี้
แนวทาง การใช้งาน Intervention Image ปรับแต่งรูปภาพใน PHP ตอนที่ 1 http://niik.in/822
https://www.ninenik.com/content.php?arti_id=822 via @ninenik
การใช้งาน PHP Barcode Generator Library
การสร้าง Barcode
ก่อนอื่นให้เราทำดาวน์โหลด package มาใช้งานใน PHP Project ของเรา โดยเข้าไปใน path ของ Project ผ่าน
Command line จากนั้นใช้คำสั่ง composer ตามด้านล่างนี้ เพื่อดาวน์โหลด package มาใช้งาน
composer require picqer/php-barcode-generator
รูปกาาติดตั้ง php barcode generator package ผ่าน composer
หลังจากนั้น ให้เราสร้างไฟล์เรียกใช้งาน สมมติใช้ชื่อว่า barcode.php ไว้ใน PHP Project ของเรา ดังรูป
ทดสอบการใช้งานเบื้องต้น ไฟล์ barcode.php
<?php // include composer autoload require_once 'vendor/autoload.php'; // กำหนด header แสดงข้อมูลรูป barcode เป็นไฟล์ png header('Content-Type: image/png'); $generator = new Picqer\Barcode\BarcodeGeneratorPNG(); // สร้าง barcode รูปแบบไฟล์ png // กำหนดค่าาตามต้องการ echo $generator->getBarcode('14318/10944894', $generator::TYPE_CODE_128,2,30,array(0,0,0)); // รูปแบบการกำหนดแบบย่อ กรณีใช้ค่าเริ่มต้น ไม่กำหนดความกว้างแต่ละเส้น ความสูง และสี // echo $generator->getBarcode('14318/10944894', $generator::TYPE_CODE_128); ?>
คำสั่ง getBarcode() จากตัวอย่างโค้ดข้างต้น จะรองรับการกำหนดค่า parameter ทั้งหมด 5 ค่า
$code
ข้อความหรือตัวเลขที่ต้องการสร้างเป็น barcode ในตัวอย่างคือ ค่า 14318/10944894
$type
ประเภทชนิดของ barcode เราสามารถใช้ค่าคงที่ต่างตามด้านล่างนี้ได้
ในตัวอย่างเรากำหนดค่าเป็น TYPE_CODE_128 ซึ่งรองรับทั้งตัวเลข ตัวอักษร และสัญลักษณ์ต่างๆ ใน
ตัวอักขระ ASCII
- TYPE_CODE_39
- TYPE_CODE_39_CHECKSUM
- TYPE_CODE_39E
- TYPE_CODE_39E_CHECKSUM
- TYPE_CODE_93
- TYPE_STANDARD_2_5
- TYPE_STANDARD_2_5_CHECKSUM
- TYPE_INTERLEAVED_2_5
- TYPE_INTERLEAVED_2_5_CHECKSUM
- TYPE_CODE_128
- TYPE_CODE_128_A
- TYPE_CODE_128_B
- TYPE_CODE_128_C
- TYPE_EAN_2
- TYPE_EAN_5
- TYPE_EAN_8
- TYPE_EAN_13
- TYPE_UPC_A
- TYPE_UPC_E
- TYPE_MSI
- TYPE_MSI_CHECKSUM
- TYPE_POSTNET
- TYPE_PLANET
- TYPE_RMS4CC
- TYPE_KIX
- TYPE_IMB
- TYPE_CODABAR
- TYPE_CODE_11
- TYPE_PHARMA_CODE
- TYPE_PHARMA_CODE_TWO_TRACKS
$widthFactor
ค่าความกว้างของเส้น barcode ในแต่ละเส้นในหน่วย pixel ปกติค่านี้ ถ้าเราไม่ระบุก็จะเท่ากับ 2 px
ซึ่งเป็นค่าเริ่มต้น การปรับขนาดความกว้างของเส้น barcode จะส่งผลให้ barcode มีขนาดกว้างขึ้น
$totalHeight
ค่าความสูงของ barcode ในหน่วย pixel ปกติถ้าไม่กำหนด จะเท่ากับ 30 px ซึ่งเป็นค่าเริ่มต้น
$color
สีของเส้น barcode การกำหนดค่า จะอยู่ในรูปแบบ array ของค่าสี ในรูปแบบ RGB ถ้าไม่ระบุ จะเป็นสีดำ
หรือเท่ากับ array(0,0,0) เหมือนโค้ดตัวอย่าง
ในการที่จะระบุว่า เราต้องการจะสร้างรูป barcode ในรูปแบบไหน เราจะกำหนดในขึ้นตอนการสร้างตัวแปร
อ้างอิง object ของ barcode generator โดยรองรับทั้งหมด 4 รูปแบบ คือ
ดังรูปแบบคำสั่งต่อไปนี้
$generatorSVG = new Picqer\Barcode\BarcodeGeneratorSVG(); $generatorPNG = new Picqer\Barcode\BarcodeGeneratorPNG(); $generatorJPG = new Picqer\Barcode\BarcodeGeneratorJPG(); $generatorHTML = new Picqer\Barcode\BarcodeGeneratorHTML();
ในตัวอย่างเราใช้รูปแบบการสร้าง barcode เป็นข้อมูลไฟล์ png โดยสีของพืนหลังจะเป็นโปร่งใส ส่วนไฟล์ jpg
พื้นหลังของ barcode จะเป็นสีขาว ในที่นี้เราจะสนใจเฉพาะส่วนที่สร้างไฟล์ png และ jpg
โดยปกติ barcode จะเหมาะสำหรับใช้ในการระบุตัวเลขข้อมูลอ้างอิง อาจมีตัวย่อ หรือข้อความภาษาอังกฤษ
สั้นๆ กำกับไว้ด้วยหรือไม่ก็ได้ ไม่เหมาะกับการนำมาใช้กับข้อความที่มีขนาดยาวๆ ทั้งนี้ก็เพราะ ยิ่งมีจำนวนข้อความ
ยาวเท่าไหร่ ตัว barcode ก็จะยิ่งกว้างและมีขนาดใหญ่เกินความเหมาะสม ไม่เหมาะในการนำไปติดไว้ในตัวผลิตภันฑ์
หรือบรรจุภันฑ์
ถึงแม้ประเภทชนิดของ barcode จะรองรับกว่า 30 รูปแบบ แต่การนำไปใช้งาน ก็ขึ้นกับแต่ละรูปแบบนั้นด้วย ยกตัวอย่าง
เช่น รูปแบบ TYPE_EAN_13 ที่เรามักพบเจอในกล่องผลิตภัณฑ์สินค้าต่างๆ ค่าที่ใช้ในการกำหนด barcode ในแต่ละค่า
ก็มีความหมายเฉพาะในตัวของมันเอง โดยอ้างอิงกับรหัสสากล อย่างในประเทศไทย ตัวเลข 13 หลัก ในรูปแบบ TYPE_EAN_13 สมมติเป็น 8859095808488 ก็ประกอบไปด้วย
- 885 รหัสประเทศไทย (อ้างอิง http://www.makebarcode.com/specs/ean_cc.html)
- 90958 รหัสบริษัท
- 0848 หมายเลขผลิตภันฑ์
- 8 ตัวเช็ค
ถ้าเราต้องการเพิ่มมูลค่าสินค้า และเพื่อให้สามารถนำเข้าไปขายในร้านฝากขายต่างๆ ที่ต้องการ barcode สินค้า เราจำ
เป็นต้องไปขอรหัสเหล่านี้ได้ที่ สถาบันรหัสสากล (GS1 Thailand) สภาอุตสาหกรรมแห่งประเทศไทย ซึ่งก็จะมีค่าใช้จ่าย
ในส่วนนี้ด้วย
สำหรับการใช้งาน barcode ในองค์กรหรือร้านค้าของเรา เพื่อใช้งานให้เกิดความสะดวกและมีระบบจัดการอย่างเป็นระบบ
มักจะใช้ชนิดของ barcode แบบ TYPE_CODE_128 และ TYPE_CODE_39 ยกตัวอย่างเช่น เราต้องการจัดการระบบสต็อก
สินค้า เราก็สามารถใช้ตัว barcode มาเป็นตัวกำหนดแยกประเภทสินค้าต่างๆ โดยใช้รูปแบบตัวเลขที่เราตั้งหรือกำหนดขึ้นมา
ให้สอดคล้องกับโปรแกรมจัดการที่เราทำขึ้น ทำให้เมื่อมีการตรวจสอบสินค้าผ่าน barcode มีความรวดเร็วและลดโอกาสที่
จะเกิดความผิดพลาดขึ้นได้
แนวทางการกำหนดรหัส Barcode
สมมติเราว่าเราขายรองเท้าจากหลายๆ ยี่ห้อ ยกตัวอย่าง A B และ C เรากำหนดรหัสให้กับแต่ละยี่ห้อเป็น 1,2 และ 3
ตามลำดับ หรือถ้ามีจำนวนยี่ห้อมากๆ ก็อาจจะใช้เป็น 01,02 ... แทนก็ได้ นอกจากนั้นเราอาจจะกำหนดขนาดไซส์ของรอง
เท้า หรือสีของรองเท้า เข้าไปในรหัส barcode ด้วยก็ได้ เช่น
WT300012032 รองเท้าสีขาว (WT=whilt) ยี่ห้อ C หมายเลขสินค้า 120 ไซส์ 32
BL300012030 รองเท้าสีขาว (BL=black) ยี่ห้อ C หมายเลขสินค้า 120 ไซส์ 30
แบบนี้เป็นต้น โดยเราแยกแต่ละส่วนเป็นดังนี้
- BL สีของสินค้า
- 3 ยี่ห้อของสินค้า อ้างอิงตามตัวเลขที่เรากำหนด
- 000120 หมายเลขสินค้า เราอาจจะกำหนดแค่ 120 ก็ได้ หรือใช้เลข 0 เพิ่มเติมเข้ามาเพื่อกรณีรองรับค่ามากๆ
- 30 ขนาดของไซส์รองเท้า
จำไว้เสมอว่า การกำหนดค่า barcode ยิ่งมีจำนวนตัวอักขระมากเท่าไหร่ ขนาดความกว้างก็จะเพิ่มขึ้นด้วย
ดังนั้นควรกำหนดขนาด ให้เหมาะสมกับบรรจุภัณฑ์หรือกล่องที่บรรจุสินค้านั้นๆ ด้วย
มาดูโค้ดตัวอย่าง barcode.php
<?php // include composer autoload require_once 'vendor/autoload.php'; // กำหนด header แสดงข้อมูลรูป barcode เป็นไฟล์ png header('Content-Type: image/png'); $generator = new Picqer\Barcode\BarcodeGeneratorPNG(); // สร้าง barcode รูปแบบไฟล์ png echo $generator->getBarcode('WT300012032', $generator::TYPE_CODE_128); // กำหนดค่าาตามต้องการ ?>
ผลลัพธ์ทดสอบรันไฟล์ ผ่านบราวเซอร์
ตัวอย่างการรับค่าจากตัวแปรที่ส่งมาเพื่อสร้าง barcode
<?php // include composer autoload require_once 'vendor/autoload.php'; // กำหนด header แสดงข้อมูลรูป barcode เป็นไฟล์ png header('Content-Type: image/png'); $generator = new Picqer\Barcode\BarcodeGeneratorPNG(); // สร้าง barcode รูปแบบไฟล์ png if(isset($_GET['code']) && $_GET['code']!=""){ echo $generator->getBarcode(urldecode(trim($_GET['code'])), $generator::TYPE_CODE_128); // กำหนดค่าาตามต้องการ } ?>
ผลลัพธ์ทดสอบรันไฟล์ ผ่านบราวเซอร์
การใช้งาน php barcode generator นั้น ถึงแม้จะมีวิธีการใช้งานที่ง่าย แต่ก็ยังไม่รองรับการทำงานอื่นๆ ที่เพิ่มเติม
หรือยังแสดงข้อมูลเฉพาะส่วนของ barcode เท่านั้น ดังนั้น หัวข้อต่อจากนี้ เราจะมาประยุกต์ใช้งานกับ Intervention
Image เพื่อเพิ่มความสามารถ ในการจัดการกับ barcode เพิ่มเติม ไม่ว่าจะเป็นการรองรับการบันทึก barcode เป็นไฟล์
รูปจำนวนมากๆ การเพิ่มข้อความ และรหัส barcode
การประยุกต์ใช้งาน PHP Barcode Generator ร่วมกับ Intervention Image
การสร้างไฟล์รูป Barcode จำนวนมากจากข้อมูลในฐานข้อมูล
เราสามารถใช้ความสามารถของ Intervention Image ในการสร้างไฟล์รูป Barcode ทีละมากๆ เพื่อเก็บไว้ใช้งาน
ในที่นี้เราจะสมมติ ข้อมูลจังหวัดในประเทศไทยเป็นตัวอย่างว่าเป็นสินค้าชนิดหนึ่ง มี province_id เป็น รหัส barcode
ที่เราจะจัดให้อยู่ในรูปแบบตัวเลข 4 ตัวอักษร มี 0 นำหน้า ตัวอย่างเช่น 1 ก็จะเป็น 0001
ไฟล์ dbconnect.php
<?php $mysqli = new mysqli("localhost", "root","","test"); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } if(!$mysqli->set_charset("utf8")) { printf("Error loading character set utf8: %s\n", $mysqli->error); exit(); }
ไฟล์ img.php
<?php require_once('dbconnect.php'); // include composer autoload require_once 'vendor/autoload.php'; // import the Intervention Image Manager Class use Intervention\Image\ImageManager; // สร้างตัวแปรอ้างอิง object ตัวจัดการรูปภาพ $manager = new ImageManager(); // ทดสอบฟิกค่าดึงข้อมูลของจังหวัด กรุงเทพ เพื่อจัดรูปแบบ barcode $sql = " SELECT * FROM tbl_provinces WHERE province_id='1' "; $result = $mysqli->query($sql); if($result && $result->num_rows>0){ $row = $result->fetch_assoc(); $text_data = $row['province_name']; $code = str_pad($row['province_id'],4,"0",STR_PAD_LEFT); // จัดรูปแบบ ให้ได้รหัสเป็น ตัวเลข 4 หลัก $img = $manager->make('http://localhost/intervention/barcode.php?code='.$code); } // ส่ง HTTP header และข้อมูลของรูปเพื่อนำไปแสดง echo $img->response(); ?>
ผลลัพธ์เมื่อเรารันไฟล์ img.php ผ่านบราวเซอร์
สิ่งที่เราต้องการบันทึก ยังไม่ใช่รูปแบบนี้ เพราะถ้าเราบันทึกเป็นไฟล์ จะทำให้เราจัดการเกี่ยวกับไฟล์นั้นได้ยาก ว่าเป็น
ไฟล์ของ สินค้าหรือจังหวัดไหน เพราะไม่มีรหัส barcode แสดงในรูป ให้เราปรับแต่งโดยเพิ่มข้อความเข้าไป
ในรูป barcode ดังนี้
ไฟล์ img.php ปรับขนาดรูปพื้นที่ barcode ใส่รหัส barcode และข้อความ
<?php require_once('dbconnect.php'); // include composer autoload require_once 'vendor/autoload.php'; // import the Intervention Image Manager Class use Intervention\Image\ImageManager; // สร้างตัวแปรอ้างอิง object ตัวจัดการรูปภาพ $manager = new ImageManager(); // ทดสอบฟิกค่าดึงข้อมูลของจังหวัด กรุงเทพ เพื่อจัดรูปแบบ barcode $sql = " SELECT * FROM tbl_provinces WHERE province_id='1' "; $result = $mysqli->query($sql); if($result && $result->num_rows>0){ $row = $result->fetch_assoc(); $text_data = $row['province_name']; $code = str_pad($row['province_id'],4,"0",STR_PAD_LEFT); // จัดรูปแบบ ให้ได้รหัสเป็น ตัวเลข 4 หลัก $img = $manager->make('http://localhost/intervention/barcode.php?code='.$code); $img->resizeCanvas(124,80, 'center', false, '#FFFFFF') ->text($text_data, 62, 22, function($font) { $font->file('fonts/THSarabun.ttf'); // ไฟล์ fonts ข้อความ $font->size(20); // ขนาด fonts หน่วย px ถ้าไม่กำหนดค่าเริ่มต้นเท่ากับ 12 $font->color('#000000'); $font->align('center'); // การจัดแนวนอน [ left, right center ] ค่าเริ่มต้น left }) ->text($code, 62, 72, function($font) { $font->file('fonts/THSarabun.ttf'); // ไฟล์ fonts ข้อความ $font->size(25); // ขนาด fonts หน่วย px ถ้าไม่กำหนดค่าเริ่มต้นเท่ากับ 12 $font->color('#000000'); $font->align('center'); // การจัดแนวนอน [ left, right center ] ค่าเริ่มต้น left }); } // ส่ง HTTP header และข้อมูลของรูปเพื่อนำไปแสดง echo $img->response(); ?>
ผลลัพธ์เมื่อเรารันไฟล์ img.php ผ่านบราวเซอร์
ตอนนี้เราได้รูปแบบรหัส barcode ที่ต้องการแล้ว ต่อไปก็ทำการวนลูปดึงข้อมูลจากฐานข้อมูล แล้วทำการสร้าง
barcode และบันทึกเป็นไฟล์ ตามรูปแบบโค้ดต่อไปนี้
ไฟล์ img.php
<?php require_once('dbconnect.php'); // include composer autoload require_once 'vendor/autoload.php'; // import the Intervention Image Manager Class use Intervention\Image\ImageManager; // สร้างตัวแปรอ้างอิง object ตัวจัดการรูปภาพ $manager = new ImageManager(); // path โฟลเดอร์ที่จะเก็บไฟล์รูป qrcode ที่สร้าง $path_barcode = "images/picbarcode/provinces/"; // ทดสอบฟิกค่าดึงข้อมูลของจังหวัด กรุงเทพ เพื่อจัดรูปแบบ barcode $sql = " SELECT * FROM tbl_provinces "; $result = $mysqli->query($sql); if($result && $result->num_rows>0){ while($row = $result->fetch_assoc()){ $text_data = $row['province_name']; $code = str_pad($row['province_id'],4,"0",STR_PAD_LEFT); // จัดรูปแบบ ให้ได้รหัสเป็น ตัวเลข 4 หลัก $file_barcode = $code.".png"; $full_savePath = $path_barcode.$file_barcode; $img = $manager->make('http://localhost/intervention/barcode.php?code='.$code); $img->resizeCanvas(124,80, 'center', false, '#FFFFFF') ->text($text_data, 62, 22, function($font) { $font->file('fonts/THSarabun.ttf'); // ไฟล์ fonts ข้อความ $font->size(20); // ขนาด fonts หน่วย px ถ้าไม่กำหนดค่าเริ่มต้นเท่ากับ 12 $font->color('#000000'); $font->align('center'); // การจัดแนวนอน [ left, right center ] ค่าเริ่มต้น left }) ->text($code, 62, 72, function($font) { $font->file('fonts/THSarabun.ttf'); // ไฟล์ fonts ข้อความ $font->size(25); // ขนาด fonts หน่วย px ถ้าไม่กำหนดค่าเริ่มต้นเท่ากับ 12 $font->color('#000000'); $font->align('center'); // การจัดแนวนอน [ left, right center ] ค่าเริ่มต้น left }) ->save($full_savePath); } } ?>
ทดสอบรันผ่านบราวเซอร์ โดยไม่มีการแสดงค่าอะไรทางบราวเซอร์ แต่จะทำการสร้างไฟล์ ไว้ในโฟลเดอร์
images > picbarcode > provinces ดังรูปด้านล่าง
เท่านี้เราก็สามารถสร้างไฟล์ barcode เป็นไฟล์รูปภาพ ไว้นำไปประยุกต์ใช้งานในภายหลังได้
เนื้อหาเกี่ยวกับ barcode โดยวิธีการใช้งานแล้ว จะไม่ยากเท่าไหร่นัก แต่การจัดรูปแบบใน Intervention Image
จำเป็นต้องทำความเข้าใจคำสั่งต่างๆ ของ Intervention Image และปรับค่าต่างๆ ในการใช้งาน จนได้ค่าหรือรูปแบบ
การแสดงที่ต้องการ ตัวอย่างเช่น
$font->align('center');
หมายถึง จัดข้อความให้อยู่ตรงกลางในแนวนอน โดยยึดตามตำแหน่งจุดเริ่มต้นของ ข้อความที่เราแสดง
สมมิตว่า รูป barcode ของเรากว้าง 124 px จุดเริ่มต้นของแนวตำแหน่ง x ที่จะให้ข้อความอยู่ตรงกลาง คือ
124 / 2 หรือเท่ากับ 62 นั่นเอง ตามการกำหนดในตัวอย่างโค้ดด้านบน
->text($code, 62, 22, function($font) {......
หวังว่าเนื้อหาข้างต้นเกี่ยวกับ php barcode generator จะมีประโยชน์ไม่มากก็น้อย สำหรับในการนำไปต่อยอด
พัฒนาใช้งานเพิ่มเติมตามความเหมาะสมต่อไป