#!/usr/bin/env python3 from PIL import Image import sys from pathlib import Path OLED_HEIGHT = 32 OLED_WIDTH = 128 OLED_PAGE_HEIGHT = 8 if len(sys.argv) < 2: print("No image path provided.") sys.exit() img_path = sys.argv[1] try: im = Image.open(img_path) except OSError: raise Exception("Oops! The image could not be opened.") img_width = im.size[0] img_height = im.size[1] if img_width > OLED_WIDTH or img_height > OLED_HEIGHT: print(f'Your image is {img_width} pixels wide and {img_height} pixels high, but...') raise Exception(f"OLED display only {OLED_WIDTH} pixels wide and {OLED_HEIGHT} pixels high!") # 2値化 im = im.convert("L") out = im.convert("1") img_name = "ssd1306img" pixels = list(out.getdata()) pixels = [0 if x == 255 else 1 for x in pixels] buffer = [] for i in range(img_height // OLED_PAGE_HEIGHT): start_index = i*img_width*OLED_PAGE_HEIGHT for j in range(img_width): out_byte = 0 for k in range(OLED_PAGE_HEIGHT): out_byte |= pixels[k*img_width + start_index + j] << k buffer.append(out_byte) with open(f'{img_name}.bin', 'wb') as f: f.write(bytearray(buffer)) print(f"Successfully created binary file: {img_name}.bin") print(f"Image dimensions: {img_width}x{img_height}")