#!/usr/bin/env python3 from PIL import Image from bs4 import BeautifulSoup from tqdm import tqdm import re import requests import sys def parse_filename(filename): split = re.split(':|,|\+|>', filename) return map(int, split[1:]) def get_image_urls(): url = sys.argv[1] soup = BeautifulSoup(requests.get(url).text, 'html.parser') for div in soup.find(id='content').find_all('div'): yield url + div.get('data-ptimg') pages = list(get_image_urls()) for metadata_url in tqdm(pages): image_url = re.sub('\.ptimg\.json$', '.jpg', metadata_url) ptimg_data = requests.get(metadata_url).json() image_data = requests.get(image_url, stream=True).raw scrambled_image = Image.open(image_data) combined_image = Image.new('RGB', (ptimg_data['views'][0]['width'], ptimg_data['views'][0]['height'])) for from_x, from_y, width, height, to_x, to_y in map(parse_filename, ptimg_data['views'][0]['coords']): chunk_data = scrambled_image.crop((from_x, from_y, from_x+width, from_y+height)) combined_image.paste(chunk_data, (to_x, to_y)) combined_image.save(image_url.split('/')[-1])