浏览代码

Add raw output option for QGF/QFF files. (#18998)

Nick Brassel 2 年之前
父节点
当前提交
9daf77b593
共有 3 个文件被更改,包括 23 次插入6 次删除
  1. 6 4
      docs/quantum_painter.md
  2. 7 0
      lib/python/qmk/cli/painter/convert_graphics.py
  3. 10 2
      lib/python/qmk/cli/painter/make_font.py

+ 6 - 4
docs/quantum_painter.md

@@ -55,10 +55,11 @@ This command converts images to a format usable by QMK, i.e. the QGF File Format
 **Usage**:
 **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
   -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.
   -d, --no-deltas       Disables the use of delta frames when encoding animations.
   -r, --no-rle          Disables the use of RLE when encoding images.
   -r, --no-rle          Disables the use of RLE when encoding images.
   -f FORMAT, --format FORMAT
   -f FORMAT, --format FORMAT
@@ -146,10 +147,11 @@ This command expects an image that conforms to the following format:
 **Usage**:
 **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
   -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.
   -r, --no-rle          Disable the use of RLE to minimise converted image size.
   -f FORMAT, --format FORMAT
   -f FORMAT, --format FORMAT
                         Output format, valid types: pal256, pal16, pal4, pal2, mono256, mono16, mono4, mono2
                         Output format, valid types: pal256, pal16, pal4, pal2, mono256, mono16, mono4, mono2

+ 7 - 0
lib/python/qmk/cli/painter/convert_graphics.py

@@ -15,6 +15,7 @@ from PIL import Image
 @cli.argument('-f', '--format', required=True, help='Output format, valid types: %s' % (', '.join(valid_formats.keys())))
 @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('-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('-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')
 @cli.subcommand('Converts an input image to something QMK understands')
 def painter_convert_graphics(cli):
 def painter_convert_graphics(cli):
     """Converts an image file to a format that Quantum Painter understands.
     """Converts an image file to a format that Quantum Painter understands.
@@ -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)
     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()
     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
     # Work out the text substitutions for rendering the output data
     subs = {
     subs = {
         'generated_type': 'image',
         'generated_type': 'image',

+ 10 - 2
lib/python/qmk/cli/painter/make_font.py

@@ -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('-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('-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('-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')
 @cli.subcommand('Converts an input font image to something QMK firmware understands')
 def painter_convert_font_image(cli):
 def painter_convert_font_image(cli):
     # Work out the format
     # Work out the format
@@ -53,6 +54,13 @@ def painter_convert_font_image(cli):
     # Render out the data
     # Render out the data
     out_data = BytesIO()
     out_data = BytesIO()
     font.save_to_qff(format, (False if cli.args.no_rle else True), out_data)
     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
     # Work out the text substitutions for rendering the output data
     subs = {
     subs = {
@@ -62,8 +70,8 @@ def painter_convert_font_image(cli):
         'year': datetime.date.today().strftime("%Y"),
         'year': datetime.date.today().strftime("%Y"),
         'input_file': cli.args.input.name,
         'input_file': cli.args.input.name,
         'sane_name': re.sub(r"[^a-zA-Z0-9]", "_", cli.args.input.stem),
         '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,
         'format': cli.args.format,
     }
     }