diff options
author | florent <florent.pigout@gmail.com> | 2011-05-01 23:34:11 (GMT) |
---|---|---|
committer | florent <florent.pigout@gmail.com> | 2011-05-01 23:34:11 (GMT) |
commit | a1c0b53c5ba4e01a6e7d1e3d693305997dfe5295 (patch) | |
tree | 78b9d6ee92ff27cec7bde853453fb92fcae8cc48 | |
parent | bfae09394075a89c9aaeaf5f2ad6407a05384c78 (diff) |
autocrop imported file from journal to library
-rw-r--r-- | atoidejouer/tools/storage.py | 80 |
1 files changed, 75 insertions, 5 deletions
diff --git a/atoidejouer/tools/storage.py b/atoidejouer/tools/storage.py index 0164053..681ba7d 100644 --- a/atoidejouer/tools/storage.py +++ b/atoidejouer/tools/storage.py @@ -93,6 +93,30 @@ def get_pixbuf_from_data(data, image_type=None, size=None): return _loader.get_pixbuf() +def __remove_inner_true(a_list): + _new_list = list() + # .. + _has_false = False + # .. + for _i, _v in enumerate(a_list): + if _v is False: + _has_false = True + else: + _sub = a_list[_i+1:] + if _has_false is True\ + and _sub.count(False) != 0: + _new_list.append(False) + continue + else: + pass + # .. + _new_list.append(_v) + # .. + del a_list + # .. + return _new_list + + def png_from_pixbuf(filename, activity_id, timestamp): # prepare outpath _out_path = get_image_path(filename) @@ -109,9 +133,11 @@ def png_from_pixbuf(filename, activity_id, timestamp): # init working vars _new_pixels = list() _first_color = None + _remove_row_list = [True for _dummy in range(_h)] + _remove_col_list = [True for _dummy in range(_w)] # update vars for _i, _row in enumerate(_pixels): - # init new row + # init new row _new_row = list() for _j, _col in enumerate(_row): # upate rgb @@ -131,24 +157,68 @@ def png_from_pixbuf(filename, activity_id, timestamp): if _rgb == _first_color: _new_row.extend([0, 0, 0, 0]) else: + _remove_row_list[_i] = False + _remove_col_list[(_j/3)-1] = False _rgb.append(255) _new_row.extend(_rgb) else: continue # add new row _new_pixels.append(_new_row) + # cleaning + del _reader + del _pixels + # remove inner True in cols or rows + _remove_row_list = __remove_inner_true(_remove_row_list) + _remove_col_list = __remove_inner_true(_remove_col_list) + # init working vars + _new_new_pixels = list() + # 2cd pass + for _i, _row in enumerate(_new_pixels): + # transparent row + if _remove_row_list[_i] is True: + continue + else: + # init new row + _new_new_row = list() + # .. + for _j, _col in enumerate(_row): + # upate rgb + if _j % 4 == 0: + _rgb = [_col] + continue + else: + _rgb.append(_col) + # update color first and after + if _j % 4 == 3: + # transparent col + if _remove_col_list[(_j/4)-1] is True: + continue + else: + _new_new_row.extend(_rgb) + else: + continue + # sorry for that! + _new_new_pixels.append(_new_new_row) + # cleaning + del _new_pixels + del _remove_row_list + del _remove_col_list + # update h and w + _w = len(_new_new_pixels[0])/4 + _h = len(_new_new_pixels) # update alpha meta _metadata['alpha'] = True _metadata['planes'] = 4 + del _metadata['size'] # write the new image with alpha _new_png = open(_out_path, 'wb') _writer = png.Writer(_w, _h, **_metadata) - _writer.write(_new_png, _new_pixels) + _writer.write(_new_png, _new_new_pixels) _new_png.close() # just in case - del _reader - del _pixels - del _new_pixels + del _writer + del _new_new_pixels def get_journal_objects(activity_name): |