Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflorent <florent.pigout@gmail.com>2011-05-01 23:34:11 (GMT)
committer florent <florent.pigout@gmail.com>2011-05-01 23:34:11 (GMT)
commita1c0b53c5ba4e01a6e7d1e3d693305997dfe5295 (patch)
tree78b9d6ee92ff27cec7bde853453fb92fcae8cc48
parentbfae09394075a89c9aaeaf5f2ad6407a05384c78 (diff)
autocrop imported file from journal to library
-rw-r--r--atoidejouer/tools/storage.py80
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):