Crop only non-cropped
This commit is contained in:
parent
ca8d110396
commit
a962453058
1 changed files with 55 additions and 26 deletions
81
crop_card.py
81
crop_card.py
|
|
@ -1,6 +1,6 @@
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
|
|
@ -13,29 +13,49 @@ CORNER_RADIUS_INCHES = 0.12
|
||||||
BASE_DIR = Path(__file__).parent
|
BASE_DIR = Path(__file__).parent
|
||||||
|
|
||||||
|
|
||||||
def gather_input_cards() -> List[str]:
|
def gather_images(directory: Path, midfix : Optional[str] = None) -> List[Path]:
|
||||||
input_path = BASE_DIR / 'input_cards'
|
|
||||||
files_to_crop = []
|
files_to_crop = []
|
||||||
for f in os.listdir(input_path):
|
for f in os.listdir(directory):
|
||||||
possible_image_path = input_path / f
|
possible_image_path = directory / f
|
||||||
if not possible_image_path.is_file():
|
if not possible_image_path.is_file():
|
||||||
# Skip directory
|
# Skip directory
|
||||||
continue
|
continue
|
||||||
if any(s == '.crop' for s in possible_image_path.suffixes):
|
# TODO: Check if is image
|
||||||
# Skip already cropped
|
if midfix is None or any(s == f'.{midfix}' for s in possible_image_path.suffixes):
|
||||||
continue
|
files_to_crop.append(possible_image_path)
|
||||||
files_to_crop.append(possible_image_path.name)
|
|
||||||
|
|
||||||
num_files_to_crop = len(files_to_crop)
|
|
||||||
print(f'Found {num_files_to_crop} images to crop')
|
|
||||||
|
|
||||||
return files_to_crop
|
return files_to_crop
|
||||||
|
|
||||||
|
|
||||||
|
def gather_input_cards() -> List[Path]:
|
||||||
|
return gather_images(directory=BASE_DIR / 'input_cards', midfix=None)
|
||||||
|
|
||||||
|
|
||||||
|
def gather_cropped_cards() -> List[Path]:
|
||||||
|
return gather_images(directory=BASE_DIR / 'cropped_cards', midfix='crop')
|
||||||
|
|
||||||
|
|
||||||
|
def get_inputs_without_crop(all_inputs: List[Path], already_cropped: List[Path]) -> List[Path]:
|
||||||
|
already_cropped_set = set(already_cropped)
|
||||||
|
inputs_without_crop = []
|
||||||
|
for input_filepath in all_inputs:
|
||||||
|
possible_cropped_filepath = input_to_crop_filepath(input_filepath)
|
||||||
|
if possible_cropped_filepath.name not in already_cropped_set:
|
||||||
|
inputs_without_crop.append(input_filepath)
|
||||||
|
return inputs_without_crop
|
||||||
|
|
||||||
|
|
||||||
|
def add_midfix(filepath: Path, midfix: str) -> Path:
|
||||||
|
return filepath.with_stem(f"{filepath.stem}.{midfix}")
|
||||||
|
|
||||||
|
|
||||||
|
def input_to_crop_filepath(input_filepath: Path) -> Path:
|
||||||
|
return add_midfix(input_filepath, 'crop')
|
||||||
|
|
||||||
|
|
||||||
def crop(input_filepath: Path) -> Path:
|
def crop(input_filepath: Path) -> Path:
|
||||||
out_dir = BASE_DIR / 'cropped_cards'
|
out_dir = BASE_DIR / 'cropped_cards'
|
||||||
out_dir.mkdir(parents=True, exist_ok=True)
|
out_dir.mkdir(parents=True, exist_ok=True)
|
||||||
cropped_filepath = out_dir / (input_filepath.stem + ".crop" + input_filepath.suffix)
|
cropped_filepath = input_to_crop_filepath(input_filepath)
|
||||||
try:
|
try:
|
||||||
with Image.open(input_filepath) as im:
|
with Image.open(input_filepath) as im:
|
||||||
# print(im.info)
|
# print(im.info)
|
||||||
|
|
@ -90,15 +110,11 @@ def crop(input_filepath: Path) -> Path:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def crop_all_inputs(files_to_crop: List[str]) -> List[Path]:
|
def crop_all_inputs(files_to_crop: List[Path]):
|
||||||
cropped_filepaths = []
|
|
||||||
num_files_to_crop = len(files_to_crop)
|
num_files_to_crop = len(files_to_crop)
|
||||||
for i, input_filename in enumerate(files_to_crop, 1):
|
for i, input_filepath in enumerate(files_to_crop, 1):
|
||||||
print(f'[{i}/{num_files_to_crop}] Cropping {input_filename}')
|
print(f'[{i}/{num_files_to_crop}] Cropping {input_filepath}')
|
||||||
input_filepath = BASE_DIR / 'input_cards' / input_filename
|
crop(input_filepath)
|
||||||
cropped_filepath = crop(input_filepath)
|
|
||||||
cropped_filepaths.append(cropped_filepath)
|
|
||||||
return cropped_filepaths
|
|
||||||
|
|
||||||
|
|
||||||
def create_sheet(cropped_filepaths: List[Path]) -> Path:
|
def create_sheet(cropped_filepaths: List[Path]) -> Path:
|
||||||
|
|
@ -146,11 +162,24 @@ def create_sheet(cropped_filepaths: List[Path]) -> Path:
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
all_input_cards = gather_input_cards()
|
all_input_cards = gather_input_cards()
|
||||||
|
print(f'Found {len(all_input_cards)} input cards:')
|
||||||
print(all_input_cards)
|
print(all_input_cards)
|
||||||
|
|
||||||
all_cropped_cards = crop_all_inputs(all_input_cards)
|
already_cropped_cards = gather_cropped_cards()
|
||||||
|
print(f'Found {len(already_cropped_cards)} already cropped cards:')
|
||||||
|
print(already_cropped_cards)
|
||||||
|
|
||||||
cards = all_cropped_cards[:8]
|
new_inputs_to_crop = get_inputs_without_crop(all_input_cards, already_cropped_cards)
|
||||||
|
print(f'Found {len(new_inputs_to_crop)} new cards to crop:')
|
||||||
|
print(new_inputs_to_crop)
|
||||||
|
|
||||||
|
crop_all_inputs(new_inputs_to_crop)
|
||||||
|
|
||||||
|
all_cropped_cards = gather_cropped_cards()
|
||||||
|
print(f'Now there are {len(already_cropped_cards)} cropped cards:')
|
||||||
|
print(already_cropped_cards)
|
||||||
|
|
||||||
|
cards_in_first_sheet = all_cropped_cards[:8]
|
||||||
# cards = [
|
# cards = [
|
||||||
# 'Svella, Ice Shaper (Extended Andrew Mar).crop.jpg',
|
# 'Svella, Ice Shaper (Extended Andrew Mar).crop.jpg',
|
||||||
# 'Icon of Ancestry.crop.png',
|
# 'Icon of Ancestry.crop.png',
|
||||||
|
|
@ -162,8 +191,8 @@ def main():
|
||||||
# 'Visionary Augmenter.crop.png',
|
# 'Visionary Augmenter.crop.png',
|
||||||
# ]
|
# ]
|
||||||
|
|
||||||
sheet_filepath = create_sheet(cards)
|
first_sheet_filepath = create_sheet(cards_in_first_sheet)
|
||||||
print(f'Output {sheet_filepath}')
|
print(f'Output {first_sheet_filepath}')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue