Added manga-py source

This commit is contained in:
2019-12-14 22:33:14 -05:00
parent 9a4dd4b09b
commit 45067caea6
420 changed files with 18054 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
from PIL import Image
class Puzzle:
need_copy_orig = False
__x = 0
__y = 0
__multiply = 1
__matrix = None
__image_src = None
__image_dst = None
__block_width = None
__block_height = None
def __init__(self, x: int, y: int, matrix: dict, multiply: int = 1):
self.__x = x
self.__y = y
self.__matrix = matrix
self.__multiply = multiply
def de_scramble(self, path_src: str, path_dst: str):
self.__image_src = Image.open(path_src, 'r')
self._process()
self.__image_dst.save(path_dst)
self.__image_src.close()
self.__image_dst.close()
def _process(self):
self.__image_dst = Image.new(self.__image_src.mode, self.__image_src.size)
self._calc_block_size()
self._check_copy_orig_image()
self._solve_matrix()
def _check_copy_orig_image(self):
if self.need_copy_orig:
self.__image_dst.paste(self.__image_src)
def _calc_block_size(self):
if self.__multiply <= 1:
self.__block_width = int(self.__image_src.size[0] / self.__x)
self.__block_height = int(self.__image_src.size[1] / self.__y)
else:
self.__block_width = self.__multiply * int(self.__image_src.size[0] / self.__y / self.__multiply)
self.__block_height = self.__multiply * int(self.__image_src.size[1] / self.__x / self.__multiply)
def _src_rect(self, i):
row = int(i / self.__x)
col = i - row * self.__x
x = col * self.__block_width
y = row * self.__block_height
return x, y, x + self.__block_width, y + self.__block_height
def _dst_rect(self, i):
row = int(self.__matrix[i] / self.__x)
col = self.__matrix[i] - row * self.__y
x = col * self.__block_width
y = row * self.__block_height
return x, y, x + self.__block_width, y + self.__block_height
def _solve_matrix(self):
for i in range(self.__x * self.__y):
src_rect = self._src_rect(i)
dst_rect = self._dst_rect(i)
region = self.__image_src.crop(src_rect)
self.__image_dst.paste(region, dst_rect)