GigCableLabel Generates colour coded labels using the resister code codes to define cable sizes for easier identification from a distance.

View project onGitHub


I currently work as a Tech in the Staging and AV world with various companies and I have noticed that many companies don't really follow a single industry standard for labeling their many cables, cases, lighting, audio, etc. I wrote this program to help solve a problem that can help companies adopt a single standard for color coded labeling based on the resister colour code for 0-9. The numeric codes are a maximum of 3 characters 0-9 and a letter for meters or feet. QR code generation is placed beside the colour coded label.

The generated QR code can contain:

  • URL
  • E-mail address
  • Phone Number
  • SMS
  • Address VCARDS
  • Calendar Event
  • Custom Text

QR codes have many uses for inventory, logistics, documentation, manifests or usage instructions to name a few. I'm just tired of wasting my time looking for the right size cable when they are all labeled differently or not at ALL! on a job site. An example of the dilemma I would face when looking for a 50 foot cable; which cable is more likely to be a 50 ft cable marking that is clear?

  • The one with the red label?
  • The one with the white label?
  • The one with the yellow label?
  • Green and Black label?

In the resistor code, Green is 5 and Black is 0; so what do you think makes the most sence when hiring many freelancers and/or techs/hands from labour companies? The resistor code is the winner, but most are stuck in their old ways

The QR code generation is from phpqrcode, this works very well and can be turned off in the class (not in the demo). The QR code size (1 to 40) will be set based on the input string length and ECC level, all the maximum alphanumeric lengths I test against are listed on this site (link to page 4/4). I've noticed that stretched QR code images don't work with Norton Snap on my iPhone 4, test your labels before you print any. I have 2 iPhone Apps for testing QR codes, Norton Snap and QRdeCODE.

The Demo:

The GigCableLabel demo will demonstrate this class in a RESTful Setup with PHP 5.3 and jQuery. GET the label, PUT the label in the project directory, DELETE the selected labels from the project directory and POST a new project for labels. There is still more work todo to make this tool a success, the UI is still very beta, view the Demo.

  • double click the new label to clear the new image and close the window or drag and drop the label on the project window to save it.
  • added some multilingual support, English and goggle translated French, Arabic will be next -- Inshallah.
  • I have also added Arabic Number labels, but with an English UI
  • Multiple projects are now supported for multiple shows, shops, etc and can be made and loaded dynamically.
  • Most of the web apps text has been moved into ini text files and loaded as a single JSON object, making it easier to edit and add translations
  • added support for custom label sizes and page layout

A look at the giglabel.php as an example of how to use this class can be used.

require_once 'gigcablelabel.class.php';
// view switcher
if     (array_key_exists('ORIG_PATH_INFO', $_SERVER)) { $rest=$_SERVER['ORIG_PATH_INFO']; }
elseif (array_key_exists('PATH_INFO', $_SERVER)) { $rest=$_SERVER['PATH_INFO']; } else { $rest=''; }
// imgdata
if  (array_key_exists('QUERY_STRING', $_SERVER)) { $imgdata=$_SERVER['QUERY_STRING']; } 
else { $imgdata=''; }
// RESTful CRUD access switcher
if  (array_key_exists('REQUEST_METHOD', $_SERVER)) { $method=$_SERVER['REQUEST_METHOD']; } 
else { $method=''; }

$webdir=str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(__FILE__));

if ($rest) {
 $r=explode('/', $rest);
 array_shift($r); // drop blank before /
 switch ($page) {
    case 'feed':
     // Make dir
     if($method == 'POST') {
      $post=json_decode($p, true);
      if (!array_key_exists('project', $post)) error_403();
      if (!ctype_alnum($post['project'])) error_403();
      if (!is_dir($dir)) mkdir(trim($dir), 0750, true);
     } else {
      if ($p == '') error_400();
      if (!ctype_alnum($p)) error_403();
      if (!is_dir($dir)) error_404();

     if($method == 'DELETE') {
       if (in_array($f, $d)) {
        if (is_file($f)) { unlink($f); } else { error_410(); }
       } else { error_404(); }
     if ($method == 'PUT') {
      $file=json_decode($j, true);
      if (! array_key_exists('code',$file) && !ctype_alnum ($file['code'])) error_404();
      if (! array_key_exists('width',$file) && !ctype_alnum ($file['width'])) error_404();
      if (! array_key_exists('height',$file) && !ctype_alnum ($file['height'])) error_404();
      if (! array_key_exists('x',$file) && !is_numeric($file['x'])) error_404();
      if (! array_key_exists('y',$file) && !is_numeric($file['y'])) error_404();

      $name=$dir."/".str_replace(':', '|', $file['published']).".json";
      $file['url']='http://'.$_SERVER['HTTP_HOST'].$webdir.trim($name, '.');
      $file['id']=uuid($name, $file['code']);
      $json=json_encode($file, JSON_ERROR_SYNTAX);
      if (! file_put_contents( $name, $json)) { error_412(); }
      echo $json;

     } elseif($method == 'DELETE' || $method == 'GET' || $method == 'POST') {
      $id=uuid($uri, 'atom');
      foreach ($j as $c) {
       $link='http://'.$_SERVER['HTTP_HOST'].$webdir.urlencode(trim($c, '.'));
       $json=json_decode($f, true);
      echo json_encode($proj);
     } else { error_405(); }
    case 'ui.json': GigCableLabel::load_ui($imgdata); break;
    case 'print':
     GigCableLabel::print_page($width, $height,$x,$y,$img_style,$imgdata) || error_404();    
    //case 'label':
    //    $code=array_shift($r);
    //    if (!ctype_alnum ($code)) error_404();
    //    $label=new GigCableLabel($code);
    //    $label->make_label();    
    case 'QR':
        if (! ctype_upper($lvl)) error_404();
        if (!ctype_alnum ($code)) error_404();
        $desc=trim(implode('//', $r), '/');
        $label=new GigCableLabel($code);
        if ($label->desc=trim($desc)) {
        } else { error_413(); }
//$label=new GigCableLabel();       


  • For creating the Arabic Images i took a look at the ArGlyphs class by a brother from Syria - Khaled Al-Shamaa
  • It showed me how to use a ttf font file for creating UNICODE text images in GD images with imagettftext; imagestring was making the text too small.

Resistors are components used frequently in electronic devices. They usually have color coded stripes that tell what is the resistance value of the resistor.

This class can generate labels suitable for printing that use the same color coded stripes used in resistors.

Manuel Lemos