> 16) & 0xFF)*.3; $g = (($rgb >> 8) & 0xFF)*.59; $b = ($rgb & 0xFF)*.11; return $r+$g+$b; } $image = open_image($_GET['image']); if ($image === false) { die ('Unable to open image'); } $x = 0; $y = 0; $z = 2; // 123456789012 $gerber = "G0 X$x Y$y Z$z F60\n"; $gerber .= "G1 Z$z F40\n\n"; $step = .0078; $max_depth = -0.005; $width = imagesx($image); $height = imagesy($image); $d = 1; $y_count = 0; for ($w = 0; $w < $width; $w++) { if ($d == 0) { $d=1; } else { $d=0; } for ($h = 0; $h < $height; $h++) { $adj_h = abs($d*($height-1)-$h); $new_x = $w * $step; $new_y = $adj_h * $step; $new_z = number_format(gray_it($image, $w, $adj_h)/255*$max_depth-$max_depth, 5, '.', ''); $x_gerber = $y_gerber = $z_gerber = ""; /* if ($new_x != $x) { $x = $new_x; $x_gerber = "X$x"; } if ($new_y != $y) { $y = $new_y; $y_gerber = "Y$y"; } if ($new_z != $z) { $z = $new_z; $z_gerber = "Z$z"; } $pregerb = $x_gerber.$y_gerber.$z_gerber; */ // row changed, update ALL Z,Y,X in that order if ($new_x != $x) { // complete line at current axis $pregerb = "X$x\n"; $x = $new_x; $y = $new_y; $z = $new_z; $pregerb .= "\nZ$z\nY$y\nX$x\n"; } else { if ($new_z != $z) { // update y before z changes $pregerb = "Y$y\n"; $z = $new_z; $y = $new_y; $pregerb = "Z$z\nY$y\n"; } else { // keep record of last y position $y = $new_y; } } ///// $gerber .= $pregerb; if ($pregerb != "") { $gerber .= "\n"; } } $gerber .= "\n\n"; } $gerber .= "G00 Z1\nG00 X0Y0\nM30"; //header('Content-Type: text'); //header('Content-Type: application/force-download'); //header('Content-Length: '.strlen($gerber)); header('Content-type: text/plain'); //header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=image.cnc'); echo $gerber; ?>