add GlitchImage class, converting to BMP
This commit is contained in:
parent
0acf870f6c
commit
3b822e4b9a
3 changed files with 40 additions and 8 deletions
|
@ -4,16 +4,18 @@ import tempfile
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
from .utils import load_file_path
|
from .utils import load_file_path
|
||||||
from .error import InterpreterError
|
from .error import InterpreterError
|
||||||
|
from .image import GlitchImage
|
||||||
|
|
||||||
|
|
||||||
class Interpreter:
|
class Interpreter:
|
||||||
"""Interpreter for scritcher instructions/statements."""
|
"""Interpreter for scritcher instructions/statements."""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.orig_path = None
|
self.orig_path = None
|
||||||
self.loaded_path = None
|
self.img = None
|
||||||
|
|
||||||
def _cmd_noop(self):
|
def _cmd_noop(self):
|
||||||
pass
|
pass
|
||||||
|
@ -26,25 +28,35 @@ class Interpreter:
|
||||||
handle, bmp_path = tempfile.mkstemp('.bmp')
|
handle, bmp_path = tempfile.mkstemp('.bmp')
|
||||||
os.close(handle)
|
os.close(handle)
|
||||||
|
|
||||||
self.loaded_path = Path(bmp_path)
|
self.img = GlitchImage(source_path, Path(bmp_path))
|
||||||
|
self.img.load()
|
||||||
|
|
||||||
def _cmd_quicksave(self):
|
def _cmd_quicksave(self):
|
||||||
suffix = self.orig_path.suffix
|
suffix = self.img.original.suffix
|
||||||
name = self.orig_path.name.replace(suffix, '')
|
name = self.img.original.name.replace(suffix, '')
|
||||||
parent_folder = self.orig_path.parents[0]
|
parent_folder = self.orig_path.parents[0]
|
||||||
|
|
||||||
# we need to search all files that match the pattern NAME_g*
|
# we need to search all files that match the pattern NAME_g*
|
||||||
|
# then we save on the one _g suffix above it.
|
||||||
|
|
||||||
|
# e.g if the original path is "miya.png", we want to search for
|
||||||
|
# files named "miya_g1.raw", "miya_g2.raw", and then we want to write
|
||||||
|
# on "miya_g3.raw".
|
||||||
index = 0
|
index = 0
|
||||||
for glitched_out in parent_folder.glob(f'{name}*'):
|
for glitched_out in parent_folder.glob(f'{name}_g*'):
|
||||||
try:
|
try:
|
||||||
idx = int(glitched_out.name.strip(name + '_g')[0])
|
idx = int(glitched_out.name.strip(name + '_g')[0])
|
||||||
|
|
||||||
|
# glob() doesnt seem to show a stable order. anyways, we can
|
||||||
|
# just only update our index when its the maximum found
|
||||||
|
if idx > index:
|
||||||
index = idx
|
index = idx
|
||||||
except (IndexError, ValueError):
|
except (IndexError, ValueError):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# create our next glitched path
|
# create our next glitched path
|
||||||
out_path = shutil.copyfile(
|
out_path = shutil.copyfile(
|
||||||
self.loaded_path, parent_folder / f'{name}_g{index + 1}.raw')
|
self.img.path, parent_folder / f'{name}_g{index + 1}.raw')
|
||||||
print('saved to', out_path)
|
print('saved to', out_path)
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +67,7 @@ class Interpreter:
|
||||||
args = shlex.split(line)
|
args = shlex.split(line)
|
||||||
command = args[0]
|
command = args[0]
|
||||||
|
|
||||||
if command != 'load' and self.loaded_path is None:
|
if command != 'load' and self.img is None:
|
||||||
print('warn: no file loaded.')
|
print('warn: no file loaded.')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
17
scritcher/image.py
Normal file
17
scritcher/image.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
import logging
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class GlitchImage:
|
||||||
|
"""A wrapper class around PIL.Image"""
|
||||||
|
def __init__(self, orig_path, target_path):
|
||||||
|
self.original = orig_path
|
||||||
|
self.path = target_path
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
"""Load the given image, convert it to BMP, and write it on the
|
||||||
|
given target path."""
|
||||||
|
log.info('opening %r into %r', self.original, self.path)
|
||||||
|
img = Image.open(self.original)
|
||||||
|
img.save(self.path, 'BMP')
|
|
@ -1,9 +1,12 @@
|
||||||
import sys
|
import sys
|
||||||
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from .executer import Interpreter
|
from .executer import Interpreter
|
||||||
from .error import InterpreterError
|
from .error import InterpreterError
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
try:
|
try:
|
||||||
scri_path = Path(sys.argv[1]).resolve()
|
scri_path = Path(sys.argv[1]).resolve()
|
||||||
|
|
Loading…
Reference in a new issue