Esempio n. 1
0
def main():
  print('Opening', sys.argv[1])
  print('Saving to', sys.argv[2])

  with open(sys.argv[1], 'rb') as f:
    metalen = ord(f.read(1))
    metastr = f.read(metalen)
    meta    = json.loads(metastr)

    scale = float(meta['s'])
    n   = meta['n']
    llo = meta['llo']
    lhi = meta['lhi']
    blo = meta['blo']
    bhi = meta['bhi']
    alo = meta['alo']
    ahi = meta['ahi']

    im = Image.new('RGB', (n, n), 'black')
    pixels = im.load()

    for d in range(n*n):
      x, y = hilbert.d2xy(n, d)
      l = float(ord(f.read(1)))*(lhi - llo)/scale + llo
      a = float(ord(f.read(1)))*(ahi - alo)/scale + alo
      b = float(ord(f.read(1)))*(bhi - blo)/scale + blo
      rgb = color.Lab(l, a, b).toRGB()

      pixels[x, y] = (int(rgb.r), int(rgb.g), int(rgb.b))

    im.save(sys.argv[2])
Esempio n. 2
0
def main():
  print 'Using scale', sys.argv[1]
  print 'Opening    ', sys.argv[2]
  print 'Writing to ', sys.argv[3]

  scale = int(sys.argv[1])
  im = Image.open(sys.argv[2])
  pixels = im.load()

  width, height = im.size

  if width != height or not powerOfTwo(width):
    raise Exception('Image must be a square with sides that are powers of two')

  n = width

  colors = []

  for d in range(n*n):
    x, y = hilbert.d2xy(n, d)
    r, g, b = pixels[x, y]
    lab = color.RGB(r, g, b).toLab()

    colors.append(lab)

    if d == 0:
      llo = lhi = lab.l
      alo = ahi = lab.a
      blo = bhi = lab.b
    else:
      llo, lhi = min(llo, lab.l), max(lhi, lab.l)
      alo, ahi = min(alo, lab.a), max(ahi, lab.a)
      blo, bhi = min(blo, lab.b), max(bhi, lab.b)

  meta = {
      'llo': llo, 'lhi': lhi, 'alo': alo, 'ahi': ahi, 'blo': blo, 'bhi': bhi, 'n': n, 's': scale
  }

  metastr = json.dumps(meta)

  with open(sys.argv[3], 'wb') as f:
    f.write(chr(len(metastr)))
    f.write(metastr)

    for lab in colors:
      l = int(round((lab.l - llo)/(lhi - llo)*scale))
      a = int(round((lab.a - alo)/(ahi - alo)*scale))
      b = int(round((lab.b - blo)/(bhi - blo)*scale))

      f.write(chr(l) + chr(a) + chr(b))