# squarify Howdy fellas.

It has been years since my Minecraft addiction but sometimes I still need some colorful pixelation, and as my fight to make my GPU work and installing Steam (you will know when I win as I won’t post here anymore), I don’t have delicious retro like games to satisfy me.

Then I’ll make my own pixel like stuff.

Well that would be easy and I could just do it with a photoshop filter. I want something more fun.

So here it is. What I do is just draw a square randomly in the canvas with the color of the average color that area should have been. As I draw more squares I lower the size slowly. The color of the square jumbles slightly by randomly increasing or decreasing each RGB value.

The resulting images have a soothing pixelation effect. But it seems to work better with colorful and contrasty images, rather than images with small details.

I hope you enjoy them.

```#! /usr/bin/env python
import random
from scipy import misc
import matplotlib.pyplot as plt
import matplotlib.patches as patches

def get_average_color((x,y),n,image):
return  image[x:x+n,y:y+n].mean((0,1))/255
#I know one liners are as fun as evil but this one slices and averages at the same time.

def FILTER(f,n=10000,Wmin=5,Wmax=300,alpha=0.6,change=0.2):
x,y,_ = im.shape
fig1	= plt.figure(figsize=(x/100.,y/100.))
ax1.set_xlim(0,x)
ax1.set_ylim(0,y)
ax1.axis('off')
def R(x):
x = x*random.choice([1+change,1-change])
if x >1:return 1  #if the resulting RGB value is larger than one then return 1 otherwise there will be an error plotting
return x
for i in range(n)[::-1]: #I inverted the range so I can use the i value for setting the size of the square
if i%1000==0: # just prints status and saves a sample of the process
print i
fig1.savefig('sample.png', dpi=100, bbox_inches='tight')
Width = int(i/float(n)*(Wmax-Wmin))+Wmin
X = lambda : random.randint(0,x-Width-1)
Y = lambda : random.randint(0,y-Width-1)
X = (X()+X())/2   # I was too lazy to use a standard distriburion so I just average two homogeneus distributions
Y = (Y()+Y())/2   # I like the result so I kept it rather than fidgeting with a nice standard deviation for the gausian distribution
r, g, b = get_average_color((X,Y), Width, im)