Added manga-py source
This commit is contained in:
77
manga-py-stable_1.x/manga_py/crypt/viz_com.py
Normal file
77
manga-py-stable_1.x/manga_py/crypt/viz_com.py
Normal file
@@ -0,0 +1,77 @@
|
||||
import re
|
||||
from typing import List, Optional, Tuple
|
||||
from PIL import Image
|
||||
from sys import stderr
|
||||
|
||||
|
||||
WIDTH = 256
|
||||
HEIGHT = 257
|
||||
KEY = 42016
|
||||
|
||||
class VizComMatrix:
|
||||
@classmethod
|
||||
def solve_image(cls, path: str, metadata: dict) -> Optional[Image.Image]:
|
||||
orig = Image.open(path) # type: Image.Image
|
||||
new_size = (orig.size[0] - 90, orig.size[1] - 140)
|
||||
ref = Image.new(orig.mode, new_size) # type: Image.Image
|
||||
ref.paste(orig)
|
||||
|
||||
exif = orig._getexif()
|
||||
if KEY in exif:
|
||||
key = [int(i, 16) for i in exif[KEY].split(':')]
|
||||
width, height = exif[WIDTH], exif[HEIGHT]
|
||||
else:
|
||||
key = []
|
||||
width, height = metadata['width'], metadata['height']
|
||||
small_width = int(width / 10)
|
||||
small_height = int(height / 15)
|
||||
|
||||
cls.paste(ref, orig, (
|
||||
0, small_height + 10,
|
||||
small_width, height - 2 * small_height,
|
||||
), (
|
||||
0, small_height,
|
||||
small_width, height - 2 * small_height,
|
||||
))
|
||||
|
||||
cls.paste(ref, orig, (
|
||||
0, 14 * (small_height + 10),
|
||||
width, orig.height - 14 * (small_height + 10),
|
||||
), (
|
||||
0, 14 * small_height,
|
||||
width, orig.height - 14 * (small_height + 10),
|
||||
))
|
||||
|
||||
cls.paste(ref, orig, (
|
||||
9 * (small_width + 10), small_height + 10,
|
||||
small_width + (width - 10 * small_width), height - 2 * small_height,
|
||||
), (
|
||||
9 * small_width, small_height,
|
||||
small_width + (width - 10 * small_width), height - 2 * small_height,
|
||||
))
|
||||
|
||||
for i, j in enumerate(key):
|
||||
cls.paste(ref, orig, (
|
||||
(i % 8 + 1) * (small_width + 10), (int(i / 8) + 1) * (small_height + 10),
|
||||
small_width, small_height,
|
||||
), (
|
||||
(j % 8 + 1) * small_width, (int(j / 8) + 1) * small_height,
|
||||
small_width, small_height,
|
||||
))
|
||||
|
||||
return ref
|
||||
|
||||
@classmethod
|
||||
def paste(cls, ref: Image.Image, orig: Image.Image, orig_box: Tuple, ref_box: Tuple):
|
||||
ref.paste(orig.crop((
|
||||
int(orig_box[0]), int(orig_box[1]),
|
||||
int(orig_box[0] + orig_box[2]), int(orig_box[1] + orig_box[3]),
|
||||
)), (
|
||||
int(ref_box[0]), int(ref_box[1]),
|
||||
int(ref_box[0] + ref_box[2]), int(ref_box[1] + ref_box[3]),
|
||||
))
|
||||
|
||||
|
||||
solve = VizComMatrix().solve_image
|
||||
|
||||
__all__ = ['solve']
|
||||
Reference in New Issue
Block a user