From 23178cb1214b5a731f337c4c7a6dfe5b4e460302 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Mon, 25 Sep 2017 22:36:07 +0200 Subject: [PATCH] Make the diplsay size configurable via LEDCAT_GEOMETRY --- nyan/__main__.py | 25 +++++++++++++++---------- nyan/cat/0.png | Bin 423 -> 341 bytes nyan/cat/1.png | Bin 430 -> 346 bytes nyan/cat/2.png | Bin 426 -> 346 bytes nyan/cat/3.png | Bin 432 -> 346 bytes nyan/cat/4.png | Bin 426 -> 342 bytes nyan/cat/5.png | Bin 435 -> 351 bytes 7 files changed, 15 insertions(+), 10 deletions(-) diff --git a/nyan/__main__.py b/nyan/__main__.py index 4a6a1f2..24af9f7 100644 --- a/nyan/__main__.py +++ b/nyan/__main__.py @@ -2,14 +2,16 @@ from collections import namedtuple import math +import os import os.path as path import random import sys import time from PIL import Image # Requires the Pillow library -DISP_WIDTH = 150 -DISP_HEIGHT = 16 +_geometry = os.getenv('LEDCAT_GEOMETRY', '150x16').split('x') +DISP_WIDTH = int(_geometry[0]) +DISP_HEIGHT = int(_geometry[1]) tail_colors = [ @@ -28,8 +30,7 @@ def read_image(filename): anim_cat = [] for i in range(0, 6): frame = read_image('%s/cat/%d.png' % (path.dirname(__file__), i)) - assert frame.size[0] == DISP_WIDTH - assert frame.size[1] == DISP_HEIGHT + assert (32, 16) == frame.size anim_cat.append(frame) anim_sparkle = [] for i in range(0, 5): @@ -57,17 +58,21 @@ while True: i = y * DISP_WIDTH + x t = time.time() col_y = y - (DISP_HEIGHT // 2 - len(tail_colors) // 2) + int(math.sin(x / 6 + t * math.pi) * 4 * math.sin(t * 8)) - if x < 130 and 0 <= col_y < len(tail_colors): + if x < (DISP_WIDTH - 10) and 0 <= col_y < len(tail_colors): color = tail_colors[col_y] else: color = (0x0f, 0x4d, 0x8f) frame[i*3:i*3+3] = color - # Paste animated frame - for i in range(DISP_WIDTH * DISP_HEIGHT): - pix = anim_frame.getpixel((i % DISP_WIDTH, i / DISP_WIDTH)) - if pix[3] != 0: - frame[i*3:i*3+3] = pix[:3] + # Copy animated frame + for anim_x in range(anim_frame.size[0]): + for anim_y in range(anim_frame.size[1]): + pix = anim_frame.getpixel((anim_x, anim_y)) + if pix[3] != 0: # Test for alpha + x = (DISP_WIDTH - anim_frame.size[0]) + anim_x + y = (DISP_HEIGHT // 2 - anim_frame.size[1] // 2) + anim_y + i = ((y * DISP_WIDTH) + x) * 3 + frame[i:i+3] = pix[:3] # Render and update the sparkles for sp in sparkles: diff --git a/nyan/cat/0.png b/nyan/cat/0.png index 97fb7da13b2147d188e84253e090587a708509e4..e53746c6a34454709ecf6b0a9b61e1a2758be23b 100644 GIT binary patch literal 341 zcmV-b0jmCqP)j?v-)fSNJG;vZLgLjaru`Ry2CIepKdK}e}P4W*Kbhj6ZUab^ZHA0Pk# zUndje5)jMFG78YI{l;+s>nk7 nZp9AIfLM=}v9A?R_-Fe9<%5D=RPMLM00000NkvXXu0mjfSc`<@ delta 411 zcmV;M0c8Hw0;dBriBL{Q4GJ0x0000DNk~Le0001%0000G2nGNE0QBgFCjbBd24YJ` zL;wH)0002_L%V;GAs2rD2XskIMF-&t2oeJr{)?270003rNklX-3$9r5bmJaRtQ@Kkj_VyNRfVcP0RsT|8q$B%mjQ-v?(VgnX(*w- zBH&zekqWNm6)H;v>*7i;-g}=wtKs_nJHXmwu(i(c9LBA`zGD?|ZG~00STi6>F?dG% zZwP0sYfEyVDp*`&#zNWVUZ5PQ5vjBcLf?ijHz=i+-002ovPDHLk FV1h6#siFV? diff --git a/nyan/cat/1.png b/nyan/cat/1.png index 949d6e6cfeddf2e70f76378df48185b8a6b546d2..5d26c82e6c3c2e686a11a4200a53afd3de45bafa 100644 GIT binary patch literal 346 zcmV-g0j2(lP)5pzjr-Xo(#L}u>3pcoX)=cqu?gXm+DFMs_iSV3QYXE?`=~#Waq}|wnR{?~&D0zBcw*I1<-9&uP?;Ib>;@RL4QhX^3&1|OyA zU<=o>b*U>*8xgDtV()J4`TAbLiWp1@P(8pk+{3uX>fZArZFDA!#Vs-v*=MIudS>di3_LnF$P=j|B-PgL)5?M7i}+xxR2f%`~Uy| M07*qoM6N<$g7$g1zyJUM diff --git a/nyan/cat/2.png b/nyan/cat/2.png index ebde06f8b2f9e9bb7cf386cea9295e607c08eb32..9beb49f1f45fe310f7d05359f4967459b16df111 100644 GIT binary patch literal 346 zcmV-g0j2(lP))nB? zDpYkP0>%xsb&bgVEls~{1q}%STN2Z@>jiid?-BTUya+V;O999OiBGw7_5gA0ylt?^ ze$K&1`R>~EMU?Q%S>8r?f6Wb-XM-e`4*&oF07*qoM6N<$g0-)VYXATM delta 414 zcmV;P0b%~y0;&TuiBL{Q4GJ0x0000DNk~Le0001%0000G2nGNE0QBgFCjbBd24YJ` zL;wH)0002_L%V;GAs2rD2XskIMF-&t2oX96@BX(H0003uNklZlAdam)A_aag773hAQXfzJkik#LRzYzyxhj%eVsA2UnMp zcb{Quf+n(tYgkvQ38<9_7A5lay?|A0P*nuj!S%9qPu)0ULH3oZfHB$N6#-zz3Vp<& z+O@u|R8;_+?ju-nU~)M+x2mnMRl!nfR;FGbtuR1!+FBX_@rRAO!s=+DWrd|DpLm(h zb7_UQR}B?_y`5q`sZ^~Bb#%{)6){sS-~9N1v=iWa8LI|(8j}cCVA#(5(n$kO?+y!8 zT;9N7nVD}w{VOi+3aM58O67Ue)@$#MWyYcvwix(JyB~4%3j+a{XEd&oIRF3v07*qo IM6N<$g51`xPXGV_ diff --git a/nyan/cat/3.png b/nyan/cat/3.png index 63c6ea4c4eba790e507a93c0fe6d87ab7d3a2efd..7b879dd22a944788bdc02c75a4387132e9f26556 100644 GIT binary patch literal 346 zcmV-g0j2(lP)k}Z|#UaV*ENLY^jn39r%hmgKAa8-q> z9z-C0K`|~8SuWM|#}3dgA)q9&ma2E)!mbhc{YwO5`I!NchQznJbn5{@t2`#y%YVm2 z#O(nqMvvJod2P%L5t%-F^nkNQ>18=3LPTAq-q})jsB78CHB|w?sR5d+F>idwSjj4I zfQ!iSTv6UreD*z>0xFiqGo)QmDL1uk>?-AFz#;j_-B7u2W);&a)6)>aM`Kw0mM
V5lIwN9nF}Hi#gUf2B-uR6jtA;A2@?1d`V?=+9aRm%I1~sqCfW7nU zQn=X)(-1UZ3)i%DsRgKw2o?o=d={{B84LkX?cn;ibWgo-#!~c7mBCob;1#JVGnT{l zg0)#{RQg(l5TL53=LnV~psIj9qT>)S5g9tu-W)TQ1E>y5TGd+UTns=c0jt}Z-<$7w zt8w-*|xIsz({G2yAuN4{!100sbO ze(A`hr%#6&Dz+O~9-rli%vjV6Lvv!3gYmt!G9-+0R~m=q@#MHYV(150Q-*{8$L}rx O0000XJS#dHQ1jb2oh;G4H{>xJKaldJ|af_ek97QtR#8qS;Odtk{1iL~?ID zT6@;So)Gh)@w{MW5c#Bfxv2u(EId_Jm!NfosHfD;wPR>)Eky*jXr2N`c_~5JO#$n9 zdpDP0YRHsl=gLUAr}%9By^F|c#2!#RA*BIF1h$flu40-cJPkGY83Bu``t%1iU18iz o2%YTr&Qi1oEHEjfeT($kKc%yUB8YQcQvd(}07*qoM6N<$f&~SS0ssI2 delta 414 zcmV;P0b%~u0;&TuiBL{Q4GJ0x0000DNk~Le0001%0000G2nGNE0QBgFCjbBd24YJ` zL;wH)0002_L%V;GAs2rD2XskIMF-&t2oW_Zy$0$&0003uNkl)R3SFv5j``uuTX+3Zh89P9(Sx9st}g*2`YDoyU%}s0RU_dXw~*X z;WGlN)#)8v!y2lR2o?oAzZbBk7%ai{*6N;Ws_TftIe@^Z&(vdbCeyrP#%R_2NS8@yEMlr>@W`99cG63^06x{I8}_F0lDghB3wY&4*&oF07*qo IM6N<$f@x%`9smFU diff --git a/nyan/cat/5.png b/nyan/cat/5.png index 42be713ff932eecb0b0c9c78786f5275febff22a..b89a8f078db42fcc342f8371ef1f8d7d58a9054c 100644 GIT binary patch literal 351 zcmV-l0igbgP)-<$%B``DsDZeP9YRcUDW7#y!_bsEsSww-AvQ zJZB)S?85-bD6%r1pZ z<<2nL@4e^9BHHM07_c$~nn836Fbc7I;J-!WBr!4zK1)DFWS@iCPJi%E{|6d@M`)et xy{I04pe9%L`Hmu9YlQ04s3j+H=-f zAHB)tmWx)1Ab;B4R%&3b_(6CNDhr0W>uP)6{^iyP#|j$W&9^TO56|u&^aHphi-Z1@ R)t3MO002ovPDHLkV1n7|xP|}#