การใช้งาน PHP Barcode Generator และประยุกต์ ร่วมกับ Intervention Image

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
phpbarcode intervention image

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ phpbarcode intervention image

ดูแล้ว 21,555 ครั้ง


เนื้อหาต่อไปนี้ จะแนะนำ PHP Barcode Generator ที่เป็น PHP Library ที่ใช้ในการสร้าง Barcode รองรับ
การสร้าง Barcode กว่า 30 รูปแบบ สามารถดูข้อมูลเพิ่มเติมด้วยตนเองได้ที่
 
เราจะติดตั้ง package มาใช้งานผ่าน composer และเนื่องจากว่าเราจะนำมาประยุกต์กับ การใช้งาน Intervention Image
จึงขอยกตัวอย่างมารวมไว้ใน PHP Project ทดสอบเดียวกันกับบทความด้านล่างนี้
    แนวทาง การใช้งาน Intervention Image ปรับแต่งรูปภาพใน PHP ตอนที่ 1 http://niik.in/822 
 

การใช้งาน 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 จะมีประโยชน์ไม่มากก็น้อย สำหรับในการนำไปต่อยอด
พัฒนาใช้งานเพิ่มเติมตามความเหมาะสมต่อไป
 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ