• Články
  • Učení Pythonu a být kreativní. Tvorba umění s kódem.
Vloženo na 05-09-2019

Učení Pythonu a být kreativní. Tvorba umění s kódem.

Jak vypadají slova jako barvy? Jak vypadají Shakespearovy sonety jako barvy? Tento mini projekt vykreslí text jako barvy pomocí Pythonu a uloží je do mřížky jako obrázek.

Všechny tituly sonetů Shakespearea

Co je to?

Začalo to jako trochu legrace pozdě v noci na codepenu, pohrávali se způsoby, jak vytvářet obrázky s kódem. Jak skutečně může barva představovat slovo? Snadné ... stačí převést slovo na barevný kód, že?

Jak se ukázalo, nebylo to tak snadné. Jako většina vývojářů jsem začal hledat knihovnu JS, která to již udělala, zbožné přání, protože to opravdu není tak užitečné. Myslel jsem, že to od Charlie Colemana bylo docela v pohodě, ale více jsem se zajímal o podrobnější zobrazení. Barva pro každé slovo, bez ohledu na to, kolik písmen nebo slov.

Přeskočením zobrazíte kód na githubu

Proč? A proč Python?

Stejně jako mnoho vývojářů, se kterými jsem se na této cestě setkal, nebyl můj titul v technickém předmětu. Ve skutečnosti to byl Čl. Přesněji řečeno, sochařství a ilustrace, ale přestože moje kariéra je ve vývoji webových aplikací, stále mám kreativní praxi. Kód je opravdu jen další materiál, se kterým se dá pracovat. (A ne, neříkám, že kód je umění, protože to je hloupé.)

Proč Python? JS byla dobrá, ale byla pomalá a zpomalovala. Slyšel jsem, že python byl opravdu rychlý, a já jsem v úmyslu hodit na to stovky slov. (Prosím, neposuzujte můj amatérský kód příliš mnoho). Nevím moc Pythona, takže to byla skvělá omluva, kterou jsem se naučil.

Plánování

Po verzi Codepen jsem se rozhodl pro následující:

  • Barvy vytvořené ze slov by měly získat hodnoty barev pomocí každého písmene, nejen několika prvních.
  • „Plátno“, na kterém barvy sedí, by mělo být nastavitelné, měl bych být schopen vytisknout obrovský obrázek celé knihy nebo malý obrázek mého jména.
  • Konečným vykreslením by měl být obrázek, nikoli webové zobrazení.

Příklad: písmena „Abcd“ jako slovo

Každému písmenu slova „Abcd“ je přiřazena hodnota, na které sedí v abecedě takto:

# pozice 0 1 2 3 4 5 ...
alphabet = ["a", "b", "c", "d", "e", "f", ...]

Protože hodnoty RGB vyžadují pouze 3 čísla, zvyšující se písmena zvyšujeme hodnoty čísel představujících první tři písmena. Tak…

  • Slovo je „ABCD“
  • Hodnoty jsou [0,1,2]
  • Zbývající hodnoty jsou [3]
  • Přidat [3] k hodnotě 1.
Příklady malých slov

Co se stane s velkými slovy?

To je místo, kde to začalo být složitější. Chci, aby všechna písmena ve slově ovlivňovala 3 barevné hodnoty RGB, takže je nechala být jen zdánlivá a ne férová. Takže pomocí cyklu zip můžeme iterovat a přidávat všechny hodnoty podle třetího písmene, např .:

  • Slovo je „Abcdefghij“
  • Hodnoty jsou [0,1,2]
  • Zbývající hodnoty jsou [3,4,5,6,7,8,9]
  • Pro každou ze zbývajících hodnot projděte počáteční hodnoty a přidejte je k 3 RGB hodnotám po jedné,
  • K val [0] se přidá zbývající hodnota 3
  • K val [1] se přidá zbývající hodnota 4
  • Do val [2] se přidá zbývající hodnota 5
  • K val [0] se přidá zbývající hodnota 6
  • Do val [1] se přidá zbývající hodnota 7
  • Atd

Tato funkce cyklu cyklu mi zachránila spoustu problémů:

pro i, j v zipu (cyklus (rozsah (len (barvy))), dodatky):
    barvy [i] + = j
    barvy [i] = int (barvy [i])

V kódu jsou také nějaké další pěkné bity, které zajistí, že hodnoty nepřesáhnou [255 255 255]. Opravdu to bylo jen něco, co přišlo, které vyžadovalo nějakou myšlenku. Všimněte si, že ve výše uvedeném seznamu mohou být počáteční hodnoty malé, například [0,1,2]. Vynásobí se tedy (255/26) nebo (limit hodnoty / písmena v abecedě). To poskytuje lepší základnu pro přidávání hodnot. [0,9,8,19,6].

Když začneme přidávat zbytkové hodnoty, vynásobí se, aby se zajistilo, že nebudeme překročit 255, vydělíme 26 pro hodnoty nad 3, ale nižší než 6. Pak pro slova s ​​více než 6 písmeny se opravdu stanou malými hodnoty vydělením více. (x * n / 26) (1/26). Zde je tato funkce:

(vlevo) E.E Cummings - Nosím vaše srdce se mnou (vpravo) William Carlos Williams - Červený kolečko

A co velké textové vstupy?

Změnil jsem velikost plátna jako proměnnou, takže pokud se používají velké texty, můžete zvětšit velikost plátna ... opravdu to povede k čemukoli. Zde je Bible krále Jakuba:

Bible krále Jakuba - na čtvercích

Kreslení, plotrování a psaní poznámek.

Připravit seznam barev bylo jednou částí, vykreslování čtverců a kresba druhou. Na webu je to docela snadné, existují knihovny jako Masonry, které dokázaly umisťovat věci opravdu dobře. Ale předtím jsem ještě ani nehrál knihovnu obrázků Python. Našel jsem jednoho, který se jmenoval Pillow a který udělal ten trik.

Vypracování vykreslování slov čtverců

Tak proč tolik poznámek a vypracování? V kódu v tomto okamžiku máme seznam (potenciálně obrovský) hodnot barev, např .:

[[45,65,221], [36,187,35], [66,84,224] ...]

Tento seznam je třeba opakovat a pro každou položku nakreslit čtverec s použitím hodnot jako barev. Těžkou částí bylo nakreslení čtverců ve vodorovné linii a spadnutí řady, když jsme narazili na konec. Jak ale víme, že jsme na konci? Jaká by měla být rozbalovací hodnota?

Zde je příklad, jak to udělat s 5 slovy jako příklad:

  • Vzhledem k tomu, že vím, kolik čtverců mám (5), vypracuji, co 'mřížku' budu potřebovat. Například 5 slov by vyžadovalo mřížku 3 x 3.
  • Teď vím, že každý řádek a sloupec bude sestávat ze tří čtverců, a mám plátno o velikosti 1000. 1000/3 bude šířka a výška každého vnitřního čtverce. A také vzdálenost, kterou potřebuji k posunutí kreslicích bodů vodorovně a svisle. Pěkný!
  • Abych zjistil, co „mřížka“ potřebuji, vytvořil jsem funkci (mřížku (n, m)), která vezme seznam slov a seznam druhých čísel a funguje to:

Nakonec vše, co zbylo, je nejasnější iterace, jakou jsem kdy napsal:

Celkově vzato to začalo jako trochu legrace, ale nakonec jsem se hodně naučil o Pythonu a kreslil jsem kódem (něco, co bych rád dělal více). Jeden opravdu pěkný rys je, že plátno může být obrovské a vaše čtverce několik milimetrů. A děkuji svému partnerovi Ashley Burdettové, že mi pomohl s matematikou plotting :)

Podívejte se na kód na githubu.

Viz též

Proč 450 milionů dolarů za tento obraz není šílenéZlaté vejce: Chudák MaidenJak umění dělá všechno lepší (takže prosím udělejte více umění)Karikaturista Grant Snider na umění, život a poznání rozdíluTakto jsem vylepšil svůj životProč YouTube AR nebude YouTube?