122 lines
3.8 KiB
Python
122 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate PNG icons for Chrome extension
|
|
Creates simple colored squares with printer icons
|
|
"""
|
|
|
|
try:
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
PIL_AVAILABLE = True
|
|
except ImportError:
|
|
PIL_AVAILABLE = False
|
|
|
|
import os
|
|
|
|
def create_simple_icon(size, filename):
|
|
"""Create a simple colored square icon"""
|
|
if PIL_AVAILABLE:
|
|
# Create image with PIL
|
|
img = Image.new('RGBA', (size, size), (0, 123, 255, 255)) # Blue background
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
# Add a white border
|
|
border_width = max(1, size // 16)
|
|
draw.rectangle([0, 0, size-1, size-1], outline=(255, 255, 255, 255), width=border_width)
|
|
|
|
# Add text (P for Print)
|
|
try:
|
|
font_size = size // 2
|
|
font = ImageFont.load_default()
|
|
text = "P"
|
|
bbox = draw.textbbox((0, 0), text, font=font)
|
|
text_width = bbox[2] - bbox[0]
|
|
text_height = bbox[3] - bbox[1]
|
|
x = (size - text_width) // 2
|
|
y = (size - text_height) // 2
|
|
draw.text((x, y), text, fill=(255, 255, 255, 255), font=font)
|
|
except:
|
|
pass
|
|
|
|
img.save(filename, 'PNG')
|
|
print(f"Created {filename} ({size}x{size})")
|
|
else:
|
|
# Create a minimal PNG file without PIL
|
|
create_minimal_png(size, filename)
|
|
|
|
def create_minimal_png(size, filename):
|
|
"""Create a minimal PNG file without PIL"""
|
|
# This creates a very basic PNG file
|
|
# Blue square with minimal PNG structure
|
|
|
|
import struct
|
|
import zlib
|
|
|
|
# PNG signature
|
|
png_signature = b'\x89PNG\r\n\x1a\n'
|
|
|
|
# IHDR chunk
|
|
width = height = size
|
|
bit_depth = 8
|
|
color_type = 2 # RGB
|
|
compression = 0
|
|
filter_method = 0
|
|
interlace = 0
|
|
|
|
ihdr_data = struct.pack('>IIBBBBB', width, height, bit_depth, color_type, compression, filter_method, interlace)
|
|
ihdr_crc = zlib.crc32(b'IHDR' + ihdr_data) & 0xffffffff
|
|
ihdr_chunk = struct.pack('>I', len(ihdr_data)) + b'IHDR' + ihdr_data + struct.pack('>I', ihdr_crc)
|
|
|
|
# IDAT chunk (blue pixels)
|
|
pixels = []
|
|
for y in range(height):
|
|
row = [0] # Filter byte
|
|
for x in range(width):
|
|
# Blue color RGB(0, 123, 255)
|
|
row.extend([0, 123, 255])
|
|
pixels.extend(row)
|
|
|
|
pixel_data = bytes(pixels)
|
|
compressed_data = zlib.compress(pixel_data)
|
|
idat_crc = zlib.crc32(b'IDAT' + compressed_data) & 0xffffffff
|
|
idat_chunk = struct.pack('>I', len(compressed_data)) + b'IDAT' + compressed_data + struct.pack('>I', idat_crc)
|
|
|
|
# IEND chunk
|
|
iend_crc = zlib.crc32(b'IEND') & 0xffffffff
|
|
iend_chunk = struct.pack('>I', 0) + b'IEND' + struct.pack('>I', iend_crc)
|
|
|
|
# Write PNG file
|
|
with open(filename, 'wb') as f:
|
|
f.write(png_signature)
|
|
f.write(ihdr_chunk)
|
|
f.write(idat_chunk)
|
|
f.write(iend_chunk)
|
|
|
|
print(f"Created minimal {filename} ({size}x{size})")
|
|
|
|
def main():
|
|
# Create icons directory if it doesn't exist
|
|
icons_dir = "/home/ske087/quality_recticel/windows_print_service/chrome_extension/icons"
|
|
|
|
print("Creating Chrome extension icons...")
|
|
print(f"PIL available: {PIL_AVAILABLE}")
|
|
|
|
# Create required icon sizes
|
|
sizes = [16, 32, 48, 128]
|
|
|
|
for size in sizes:
|
|
filename = os.path.join(icons_dir, f"icon{size}.png")
|
|
create_simple_icon(size, filename)
|
|
|
|
print("✅ All icons created successfully!")
|
|
print("\nIcons created:")
|
|
for size in sizes:
|
|
filename = f"icon{size}.png"
|
|
filepath = os.path.join(icons_dir, filename)
|
|
if os.path.exists(filepath):
|
|
file_size = os.path.getsize(filepath)
|
|
print(f" ✓ {filename} ({size}x{size}px, {file_size} bytes)")
|
|
else:
|
|
print(f" ✗ {filename} - FAILED")
|
|
|
|
if __name__ == "__main__":
|
|
main() |