From a4b45196df2e12ace14c82407e2bc10b0a1eff3e Mon Sep 17 00:00:00 2001 From: jaseg Date: Sun, 7 Feb 2021 13:54:36 +0100 Subject: Update gerboweb --- gerboweb/gerboweb.py | 14 +-- gerboweb/static/sample2.jpg | Bin 251440 -> 521032 bytes gerboweb/templates/index.html | 274 +++++++++++++++++++++--------------------- 3 files changed, 144 insertions(+), 144 deletions(-) diff --git a/gerboweb/gerboweb.py b/gerboweb/gerboweb.py index 2633e7b..c227e63 100644 --- a/gerboweb/gerboweb.py +++ b/gerboweb/gerboweb.py @@ -72,7 +72,7 @@ def index(): r = make_response(render_template('index.html', has_renders = path.isfile(tempfile_path('gerber.zip')), - has_output = path.isfile(tempfile_path('overlay.png')), + has_output = path.isfile(tempfile_path('overlay.svg')), **forms)) if 'vector_job' in session or 'render_job' in session: r.headers.set('refresh', '10') @@ -108,7 +108,7 @@ def upload_gerber(): session['filename'] = secure_filename(f.filename) # Cache filename for later download render() - if path.isfile(tempfile_path('overlay.png')): # Re-vectorize when gerbers change + if path.isfile(tempfile_path('overlay.svg')): # Re-vectorize when gerbers change vectorize() flash(f'Gerber file successfully uploaded.', 'success') @@ -121,7 +121,7 @@ def upload_overlay(): if upload_form.validate_on_submit(): # FIXME raise error when no side selected f = upload_form.upload_file.data - f.save(tempfile_path('overlay.png')) + f.save(tempfile_path('overlay.svg')) session['side_selected'] = upload_form.side.data vectorize() @@ -133,7 +133,7 @@ def upload_overlay(): def render_preview(side): if not side in ('top', 'bottom'): return abort(400, 'side must be either "top" or "bottom"') - return send_file(tempfile_path(f'render_{side}.small.png')) + return send_file(tempfile_path(f'template_{side}.preview.png')) @app.route('/render/download/') def render_download(side): @@ -141,10 +141,10 @@ def render_download(side): return abort(400, 'side must be either "top" or "bottom"') session['last_download'] = side - return send_file(tempfile_path(f'render_{side}.png'), - mimetype='image/png', + return send_file(tempfile_path(f'template_{side}.svg'), + mimetype='image/svg', as_attachment=True, - attachment_filename=f'{path.splitext(session["filename"])[0]}_render_{side}.png') + attachment_filename=f'{path.splitext(session["filename"])[0]}_template_{side}.svg') @app.route('/output/download') def output_download(): diff --git a/gerboweb/static/sample2.jpg b/gerboweb/static/sample2.jpg index ef47bd4..ba8e984 100644 Binary files a/gerboweb/static/sample2.jpg and b/gerboweb/static/sample2.jpg differ diff --git a/gerboweb/templates/index.html b/gerboweb/templates/index.html index a19fc88..3de8ea5 100644 --- a/gerboweb/templates/index.html +++ b/gerboweb/templates/index.html @@ -1,7 +1,7 @@ - Gerbolyze Raster image to PCB renderer + Gerbolyze Image to PCB Toolchain @@ -10,157 +10,157 @@
-
-

Raster image to PCB converter

-

- Gerbolyze is a tool for rendering black and white raster (PNG) images directly onto gerber layers. You can - use this to put art on a PCB's silkscreen, solder mask or copper layers. The input is a black-and-white PNG - image that is vectorized and rendered into an existing gerber file. Gerbolyze works with gerber files - produced with any EDA toolchain and has been tested to work with both Altium and KiCAD. -

-
+
+

SVG/JPG/PNG to PCB converter

+

+ Gerbolyze is a tool for rendering arbitrary vector (SVG) and raster (PNG/JPG) images directly onto gerber layers. + You can use this to put art on a PCB's silkscreen, solder mask or copper layers. The input is an SVG file + generated from a template. This SVG file has one layer for each PCB layer and the layers are rendered one by one + into the existing gerber file. SVG primitives are converted as-is with (almost) full SVG support, and bitmap + images are vectorized using a vector halftone processor. Gerbolyze works with gerber files produced with any EDA + toolchain and has been tested to work with both Altium and KiCAD. +

+
{% with messages = get_flashed_messages(with_categories=True) %} - {% if messages %} -
- {% for category, message in messages %} -
{{ message }}
- {% endfor %} -
- {% endif %} + {% if messages %} +
+ {% for category, message in messages %} +
{{ message }}
+ {% endfor %} +
+ {% endif %} {% endwith %}
{{reset_form.csrf_token}}
-
-
-

Upload zipped gerber files

-

- First, upload a zip file containing all your gerber files. The default file names used by KiCAD, Eagle - and Altium are supported. -

-
+
+
+

Upload zipped gerber files

+

+ First, upload a zip file containing all your gerber files. The default file names used by KiCAD, Eagle + and Altium are supported. +

+
-
-
- {{gerber_form.csrf_token}} -
-
-
Upload Gerber file:
- -
-
- - -
-
-
+
+
+ {{gerber_form.csrf_token}} +
+
+
Upload Gerber file:
+ +
+
+ + +
+
+
- {% if 'render_job' in session or has_renders %} -
-
-

Download the target side's preview image

-

- Second, download either the top or bottom preview image and use it to align and scale your own artwork - in an image editing program such as Gimp. Then upload your overlay image below. + {% if 'render_job' in session or has_renders %} +

+
+

Download the target side's preview image

+

+ Second, download either the top or bottom SVG template and place your own artwork in it on the appropriate + layers. The template is made to work well with the excellent open-source Inkscape + vector graphics editor. When you are done, upload your overlay below. - Note that you will have to convert grayscale images into binary images yourself. Gerbolyze can't do this - for you since there are lots of variables involved. Our Guideline on image processing gives an overview on - one way to produce agreeable binary images from grayscale source material. -

-
-
- {% if 'render_job' in session %} -
-
-
Processing...
-
(this may take several minutes!)
-
- {% else %} - - {% endif %} -
- -
-
-
+ If you wish to put a bitmap image (PNG/JPG) on your board, simply place it into the SVG on the appropriate + layer. Make sure you select Inkscape's "embed image" option when importing it. +

+
+
+ {% if 'render_job' in session %} +
+
+
Processing...
+
(this may take several minutes!)
+
+ {% else %} + + {% endif %} +
+ +
+
+
-
-
-

Upload overlay image

-

- Now, upload your binary overlay image as a PNG and let gerbolyze render it onto the target layer. The PNG - file should be a black and white binary file with details generally above about 10px size. Antialiased - edges are supported. -

-
-
-
- {{overlay_form.csrf_token}} -
-
-
Upload Overlay PNG file:
- -
-
-
Target layer:
- - - - -
-
- - -
-
-
+
+
+

Upload overlay SVG

+

+ Now, upload your binary overlay as an SVG and let gerbolyze paste it onto the target layers. +

+
+
+
+ {{overlay_form.csrf_token}} +
+
+
Upload Overlay PNG file:
+ +
+
+
Target layer:
+ + + + +
+
+ + +
+
+
- {% if 'vector_job' in session or has_output %} -
-
-

Download the processed gerber files

-
-
- {% if 'vector_job' in session %} -
-
-
Processing...
-
(this may take several minutes!)
-
- {% else %} - - {% endif %} -
- -
- -
-
- {% endif %} {# vector job #} - {% endif %} {# render job #} + {% if 'vector_job' in session or has_output %} +
+
+

Download the processed gerber files

+
+
+ {% if 'vector_job' in session %} +
+
+
Processing...
+
(this may take several minutes!)
+
+ {% else %} + + {% endif %} +
+ +
+ +
+
+ {% endif %} {# vector job #} + {% endif %} {# render job #}
-

Sample images

- - - +

Sample images

+ + +
-- cgit