<?php require_once('jSignature_Tools_Base30.php'); function base30_to_jpeg($base30_string, $output_file) { $data = str_replace('image/jsignature;base30,', '', $base30_string); $converter = new jSignature_Tools_Base30(); $raw = $converter->Base64ToNative($data); //Calculate dimensions $width = 0; $height = 0; foreach($raw as $line) { if (max($line['x'])>$width)$width=max($line['x']); if (max($line['y'])>$height)$height=max($line['y']); } // Create an image $im = imagecreatetruecolor($width+20,$height+20); // Save transparency for PNG imagesavealpha($im, true); // Fill background with transparency $trans_colour = imagecolorallocatealpha($im, 255, 255, 255, 127); imagefill($im, 0, 0, $trans_colour); // Set pen thickness imagesetthickness($im, 2); // Set pen color to black $black = imagecolorallocate($im, 0, 0, 0); // Loop through array pairs from each signature word for ($i = 0; $i < count($raw); $i++) { // Loop through each pair in a word for ($j = 0; $j < count($raw[$i]['x']); $j++) { // Make sure we are not on the last coordinate in the array if ( ! isset($raw[$i]['x'][$j])) break; if ( ! isset($raw[$i]['x'][$j+1])) // Draw the dot for the coordinate imagesetpixel ( $im, $raw[$i]['x'][$j], $raw[$i]['y'][$j], $black); else // Draw the line for the coordinate pair imageline($im, $raw[$i]['x'][$j], $raw[$i]['y'][$j], $raw[$i]['x'][$j+1], $raw[$i]['y'][$j+1], $black); } } //Create Image $ifp = fopen($output_file, "wb"); imagepng($im, $output_file); fclose($ifp); imagedestroy($im); return $output_file; } //test $imgStr='image/jsignature;base30,7U010100010000000001_1G88b8ace99aab756856_bE2000000010000000101_1D6689cbaa9b956558564_8w757698987766566556545_3PZ2110101010100000000Y10_fF0000Z2100001000Y110_1V9789cb86966655475_fK_1x'; base30_to_jpeg($imgStr, 'test.png'); ?>