Delete E3S1PROFORKBYTT_prusa_v27_thumbnail.py
parent
a13088ed3a
commit
697dffe2de
@ -1,85 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Prusa Slicer as of v2.7 remove headers before jpg and convert PNG to JPG.
|
|
||||||
#
|
|
||||||
# This script has been developed for E3S1PROFORKBYTT by Thomas Toka.
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import base64
|
|
||||||
from PIL import Image
|
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
def main(source_file):
|
|
||||||
# Read the ENTIRE g-code file into memory
|
|
||||||
with open(source_file, "r") as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
|
|
||||||
# Find the index of the line containing '; HEADER_BLOCK_START' and '; HEADER_BLOCK_END'
|
|
||||||
header_start = next((i for i, line in enumerate(lines) if line.strip() == '; HEADER_BLOCK_START'), None)
|
|
||||||
header_end = next((i for i, line in enumerate(lines) if line.strip() == '; HEADER_BLOCK_END'), None)
|
|
||||||
|
|
||||||
# Remove the header block if both start and end are found
|
|
||||||
if header_start is not None and header_end is not None:
|
|
||||||
del lines[header_start:header_end + 1]
|
|
||||||
|
|
||||||
# Find and remove the '; THUMBNAIL_BLOCK_START' line
|
|
||||||
thumbnail_block_start_index = next((i for i, line in enumerate(lines) if line.strip() == '; THUMBNAIL_BLOCK_START'), None)
|
|
||||||
if thumbnail_block_start_index is not None:
|
|
||||||
del lines[thumbnail_block_start_index]
|
|
||||||
|
|
||||||
# Convert the thumbnail from PNG to JPEG
|
|
||||||
thumbnail_start = next((i for i, line in enumerate(lines) if '; thumbnail begin' in line), None)
|
|
||||||
|
|
||||||
if thumbnail_start is not None:
|
|
||||||
thumbnail_end = next((i for i, line in enumerate(lines[thumbnail_start:], start=thumbnail_start) if '; thumbnail end' in line), None)
|
|
||||||
|
|
||||||
if thumbnail_end is not None:
|
|
||||||
# Extract and decode the PNG data
|
|
||||||
original_png_data = "".join(lines[thumbnail_start + 1:thumbnail_end]).replace("; ", "")
|
|
||||||
png_data_bytes = base64.b64decode(original_png_data)
|
|
||||||
image = Image.open(BytesIO(png_data_bytes))
|
|
||||||
image = image.convert("RGB")
|
|
||||||
|
|
||||||
# Encode the image as JPEG
|
|
||||||
buffer = BytesIO()
|
|
||||||
image.save(buffer, format="JPEG")
|
|
||||||
image_jpg_data = buffer.getvalue()
|
|
||||||
|
|
||||||
# Base64 encode the JPEG data
|
|
||||||
image_jpg_base64 = base64.b64encode(image_jpg_data).decode('utf-8')
|
|
||||||
|
|
||||||
# Replace the size in the '; thumbnail begin' line with the new JPEG size
|
|
||||||
lines[thumbnail_start] = f'; thumbnail_JPG begin 250x250 {len(image_jpg_data)}\n'
|
|
||||||
|
|
||||||
# Split the base64 string into formatted lines
|
|
||||||
max_line_length = 79 - len("; ")
|
|
||||||
injected_jpg_data = ["; " + image_jpg_base64[i:i + max_line_length] for i in range(0, len(image_jpg_base64), max_line_length)]
|
|
||||||
|
|
||||||
# Replace the old PNG lines with the new JPEG lines
|
|
||||||
lines[thumbnail_start + 1:thumbnail_end] = [line + "\n" for line in injected_jpg_data]
|
|
||||||
|
|
||||||
# Remove all lines before '; thumbnail_JPG begin'
|
|
||||||
lines = [line for line in lines if not line.strip() == ';' and not line.strip() == '']
|
|
||||||
thumbnail_jpg_index = next((i for i, line in enumerate(lines) if line.startswith('; thumbnail_JPG begin')), None)
|
|
||||||
|
|
||||||
if thumbnail_jpg_index is not None and thumbnail_jpg_index > 0:
|
|
||||||
# Check and remove the specific line if it starts with '; generated by PrusaSlicer'
|
|
||||||
if lines[thumbnail_jpg_index - 1].startswith('; generated by PrusaSlicer'):
|
|
||||||
del lines[thumbnail_jpg_index - 1]
|
|
||||||
|
|
||||||
# Now we remove the newline before the '; thumbnail_JPG begin', if present
|
|
||||||
if thumbnail_jpg_index > 0 and lines[thumbnail_jpg_index - 1].strip() == '':
|
|
||||||
del lines[thumbnail_jpg_index - 1]
|
|
||||||
|
|
||||||
# Write the modified content back to the original file
|
|
||||||
with open(source_file, "w") as f:
|
|
||||||
f.writelines(lines)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("Usage: python3 script.py <gcode-file>")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
main(sys.argv[1])
|
|
Loading…
Reference in New Issue