mirror of
https://git.mirrors.martin98.com/https://github.com/luc-github/ESP3D.git
synced 2025-08-04 20:30:37 +08:00

### Maintenance page * Add add tab color for mobile view * Add spellcheck off / autocorect off in input * Add disconnect button when authenticate enabled * Add Invalid user or password message when authentication failed ### Board support * Add ESP32 S2 support * Add ESP32 S3 support * Add ESP32 C3 support ### ESP commands * Add command 701 to control GCODE streaming * Remove command 901 as duplicate * Update command 420 to add more details * Use text as default output * All json on all commands for formated output ### Core * Add benchmak function to check transfer speed (for test only-not production) * Merge code for ESP3DLib support * Add better printer display support (M117 / Serial TFT) * Use ESP32 analogWrite instead of emulated one ### Modules * Display * Refactor code * Remove SPI ILI 9341 / 9488 support as not suitable * Add ST7789 support (135x240 / 240x240) * Filesystem * Bug fixes due to esp core updates * Better SD sharing mecanism * Better global FS management * FTP * Add SD sharing support * Better global FS management * GCODE Host * Add basic support for macro files * Add ESP command support * Use not blocking method to stream commands / handle response * Notifications * Add IFTTT notification service * Add WebUI notification * Add ESP3D display notification * WebDav * Add SD sharing support * Add bug fix from https://github.com/d-a-v/ESPWebDAV * Better global FS management * Websocket * Add function to handle zombies connections * WiFi * Fix connection to AP sometime fail * Fix low signal not diplayed in ESP420 even connected * Add AP Setup mode ### Libraries * Update SDFat-2.0.6 to 2.1.2 * Update ESP32SSDP 1.1.1 to 1.2.0 * Update TFT_eSPI-1.4.11 to 2.4.61 * Update arduinoWebSockets-2.3.5 to 2.3.6 * Update esp8266-oled-ssd1306-4.0.0 to 4.3.0 * Remove lvgl support ### Tools * Add I2C scanner script * Add python script to simulate/stress printer serial communication ### PlatformIO * Use latest 4.4.0 Espressif32 release (ESP32-arduino core 2.0.3) * Add fix for Flash more than 4MB * Add Esp32 S2/S3/C3 env * Add ESP32-ST7789 / esp32-TTGO_T_Display env
139 lines
3.5 KiB
Python
139 lines
3.5 KiB
Python
##################################################################
|
|
# sjpeg converter script version 1.0
|
|
# Dependencies: (PYTHON-3)
|
|
##################################################################
|
|
SJPG_FILE_FORMAT_VERSION = "V1.00" #
|
|
JPEG_SPLIT_HEIGHT = 16
|
|
##################################################################
|
|
import math, os, sys, time
|
|
from PIL import Image
|
|
|
|
|
|
OUTPUT_FILE_NAME = ""
|
|
INPUT_FILE = ""
|
|
|
|
|
|
if len(sys.argv) == 2:
|
|
INPUT_FILE = sys.argv[1]
|
|
OUTPUT_FILE_NAME = INPUT_FILE.split("/")[-1].split("\\")[-1].split(".")[0]
|
|
else:
|
|
print("usage:\n\t python " + sys.argv[0] + " input_file.jpg")
|
|
sys.exit(0)
|
|
|
|
try:
|
|
im = Image.open(INPUT_FILE)
|
|
except:
|
|
print("\nFile not found!")
|
|
sys.exit(0)
|
|
|
|
|
|
print("\nConversion started...\n")
|
|
start_time = time.time()
|
|
width, height = im.size
|
|
|
|
print("Input:")
|
|
print("\t" + INPUT_FILE)
|
|
print("\tRES = " + str(width) + " x " + str(height) + '\n')
|
|
|
|
|
|
lenbuf = []
|
|
block_size = JPEG_SPLIT_HEIGHT;
|
|
spilts = math.ceil(height/block_size)
|
|
|
|
c_code = '''//LVGL SJPG C ARRAY\n#include "lvgl/lvgl.h"\n\nconst uint8_t ''' + OUTPUT_FILE_NAME + '''_map[] = {\n'''
|
|
|
|
sjpeg_data = bytearray()
|
|
sjpeg = bytearray()
|
|
|
|
|
|
row_remaining = height;
|
|
for i in range(spilts):
|
|
if row_remaining < block_size:
|
|
crop = im.crop((0, i*block_size, width, row_remaining + i*block_size))
|
|
else:
|
|
crop = im.crop((0, i*block_size, width, block_size + i*block_size))
|
|
|
|
row_remaining = row_remaining - block_size;
|
|
crop.save(str(i)+".jpg", quality=90)
|
|
|
|
|
|
|
|
|
|
for i in range(spilts):
|
|
f = open(str(i)+".jpg", "rb")
|
|
a = f.read()
|
|
f.close()
|
|
sjpeg_data = sjpeg_data + a
|
|
lenbuf.append(len(a))
|
|
|
|
header = bytearray()
|
|
|
|
#4 BYTES
|
|
header = header + bytearray("_SJPG__".encode("UTF-8"));
|
|
|
|
#6 BYTES VERSION
|
|
header = header + bytearray(("\x00" + SJPG_FILE_FORMAT_VERSION + "\x00").encode("UTF-8"));
|
|
|
|
#WIDTH 2 BYTES
|
|
header = header + width.to_bytes(2, byteorder='little');
|
|
|
|
#HEIGHT 2 BYTES
|
|
header = header + height.to_bytes(2, byteorder='little');
|
|
|
|
#NUMBER OF ITEMS 2 BYTES
|
|
header = header + spilts.to_bytes(2, byteorder='little');
|
|
|
|
#NUMBER OF ITEMS 2 BYTES
|
|
header = header + int(JPEG_SPLIT_HEIGHT).to_bytes(2, byteorder='little');
|
|
|
|
for item_len in lenbuf:
|
|
# WIDTH 2 BYTES
|
|
header = header + item_len.to_bytes(2, byteorder='little');
|
|
|
|
|
|
data = bytearray()
|
|
|
|
sjpeg = header + sjpeg_data;
|
|
|
|
if 1:
|
|
for i in range(len(lenbuf)):
|
|
os.remove(str(i) + ".jpg")
|
|
|
|
|
|
f = open(OUTPUT_FILE_NAME+".sjpg","wb");
|
|
f.write(sjpeg)
|
|
f.close()
|
|
|
|
new_line_threshold = 0
|
|
for i in range(len(sjpeg)):
|
|
c_code = c_code + "\t" + str(hex(sjpeg[i])) + ","
|
|
new_line_threshold = new_line_threshold + 1
|
|
if (new_line_threshold >= 16):
|
|
c_code = c_code + "\n"
|
|
new_line_threshold = 0
|
|
|
|
|
|
c_code = c_code + "\n};\n\nlv_img_dsc_t "
|
|
c_code = c_code + OUTPUT_FILE_NAME + " = {\n"
|
|
c_code = c_code + "\t.header.always_zero = 0,\n"
|
|
c_code = c_code + "\t.header.w = " + str(width) + ",\n"
|
|
c_code = c_code + "\t.header.h = " + str(height) + ",\n"
|
|
c_code = c_code + "\t.data_size = " + str(len(sjpeg)) + ",\n"
|
|
c_code = c_code + "\t.header.cf = LV_IMG_CF_RAW,\n"
|
|
c_code = c_code + "\t.data = " + OUTPUT_FILE_NAME+"_map" + ",\n};"
|
|
|
|
|
|
f = open(OUTPUT_FILE_NAME + '.c', 'w')
|
|
f.write(c_code)
|
|
f.close()
|
|
|
|
|
|
time_taken = (time.time() - start_time)
|
|
|
|
print("Output:")
|
|
print("\tTime taken = " + str(round(time_taken,2)) + " sec")
|
|
print("\tbin size = " + str(round(len(sjpeg)/1024, 1)) + " KB" )
|
|
print("\t" + OUTPUT_FILE_NAME + ".sjpg\t(bin file)" + "\n\t" + OUTPUT_FILE_NAME + ".c\t\t(c array)")
|
|
|
|
print("\nAll good!")
|