Skip to content

Commit

Permalink
Add raw output option for QGF/QFF files. (qmk#18998)
Browse files Browse the repository at this point in the history
  • Loading branch information
tzarc authored and ramonimbao committed Nov 28, 2022
1 parent b0edae8 commit 367b1cf
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
10 changes: 6 additions & 4 deletions docs/quantum_painter.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ This command converts images to a format usable by QMK, i.e. the QGF File Format
**Usage**:

```
usage: qmk painter-convert-graphics [-h] [-d] [-r] -f FORMAT [-o OUTPUT] -i INPUT [-v]
usage: qmk painter-convert-graphics [-h] [-w] [-d] [-r] -f FORMAT [-o OUTPUT] -i INPUT [-v]
optional arguments:
options:
-h, --help show this help message and exit
-w, --raw Writes out the QGF file as raw data instead of c/h combo.
-d, --no-deltas Disables the use of delta frames when encoding animations.
-r, --no-rle Disables the use of RLE when encoding images.
-f FORMAT, --format FORMAT
Expand Down Expand Up @@ -146,10 +147,11 @@ This command expects an image that conforms to the following format:
**Usage**:

```
usage: qmk painter-convert-font-image [-h] [-r] -f FORMAT [-u UNICODE_GLYPHS] [-n] [-o OUTPUT] [-i INPUT]
usage: qmk painter-convert-font-image [-h] [-w] [-r] -f FORMAT [-u UNICODE_GLYPHS] [-n] [-o OUTPUT] [-i INPUT]
optional arguments:
options:
-h, --help show this help message and exit
-w, --raw Writes out the QFF file as raw data instead of c/h combo.
-r, --no-rle Disable the use of RLE to minimise converted image size.
-f FORMAT, --format FORMAT
Output format, valid types: pal256, pal16, pal4, pal2, mono256, mono16, mono4, mono2
Expand Down
7 changes: 7 additions & 0 deletions lib/python/qmk/cli/painter/convert_graphics.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
@cli.argument('-f', '--format', required=True, help='Output format, valid types: %s' % (', '.join(valid_formats.keys())))
@cli.argument('-r', '--no-rle', arg_only=True, action='store_true', help='Disables the use of RLE when encoding images.')
@cli.argument('-d', '--no-deltas', arg_only=True, action='store_true', help='Disables the use of delta frames when encoding animations.')
@cli.argument('-w', '--raw', arg_only=True, action='store_true', help='Writes out the QGF file as raw data instead of c/h combo.')
@cli.subcommand('Converts an input image to something QMK understands')
def painter_convert_graphics(cli):
"""Converts an image file to a format that Quantum Painter understands.
Expand Down Expand Up @@ -53,6 +54,12 @@ def painter_convert_graphics(cli):
input_img.save(out_data, "QGF", use_deltas=(not cli.args.no_deltas), use_rle=(not cli.args.no_rle), qmk_format=format, verbose=cli.args.verbose)
out_bytes = out_data.getvalue()

if cli.args.raw:
raw_file = cli.args.output / (cli.args.input.stem + ".qgf")
with open(raw_file, 'wb') as raw:
raw.write(out_bytes)
return

# Work out the text substitutions for rendering the output data
subs = {
'generated_type': 'image',
Expand Down
12 changes: 10 additions & 2 deletions lib/python/qmk/cli/painter/make_font.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def painter_make_font_image(cli):
@cli.argument('-u', '--unicode-glyphs', default='', help='Also generate the specified unicode glyphs.')
@cli.argument('-f', '--format', required=True, help='Output format, valid types: %s' % (', '.join(valid_formats.keys())))
@cli.argument('-r', '--no-rle', arg_only=True, action='store_true', help='Disable the use of RLE to minimise converted image size.')
@cli.argument('-w', '--raw', arg_only=True, action='store_true', help='Writes out the QFF file as raw data instead of c/h combo.')
@cli.subcommand('Converts an input font image to something QMK firmware understands')
def painter_convert_font_image(cli):
# Work out the format
Expand All @@ -53,6 +54,13 @@ def painter_convert_font_image(cli):
# Render out the data
out_data = BytesIO()
font.save_to_qff(format, (False if cli.args.no_rle else True), out_data)
out_bytes = out_data.getvalue()

if cli.args.raw:
raw_file = cli.args.output / (cli.args.input.stem + ".qff")
with open(raw_file, 'wb') as raw:
raw.write(out_bytes)
return

# Work out the text substitutions for rendering the output data
subs = {
Expand All @@ -62,8 +70,8 @@ def painter_convert_font_image(cli):
'year': datetime.date.today().strftime("%Y"),
'input_file': cli.args.input.name,
'sane_name': re.sub(r"[^a-zA-Z0-9]", "_", cli.args.input.stem),
'byte_count': out_data.getbuffer().nbytes,
'bytes_lines': render_bytes(out_data.getbuffer().tobytes()),
'byte_count': len(out_bytes),
'bytes_lines': render_bytes(out_bytes),
'format': cli.args.format,
}

Expand Down

0 comments on commit 367b1cf

Please sign in to comment.