diff --git a/pa_job_manager.py b/pa_job_manager.py index bc6a10a..82c21a1 100644 --- a/pa_job_manager.py +++ b/pa_job_manager.py @@ -23,7 +23,7 @@ from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session ### LOCAL FILE IMPORTS ### -from shared import DB_URL, PA_JOB_MANAGER_HOST, PA_JOB_MANAGER_PORT, THUMBSIZE, SymlinkName, GenThumb, SECS_IN_A_DAY +from shared import DB_URL, PA_JOB_MANAGER_HOST, PA_JOB_MANAGER_PORT, THUMBSIZE, SymlinkName, GenThumb, SECS_IN_A_DAY, PA_EXIF_ROTATER from datetime import datetime, timedelta, date ### PYTHON LIB IMPORTS ### @@ -45,6 +45,7 @@ import face_recognition import re import sys import ffmpeg +import subprocess # global debug setting @@ -1901,21 +1902,20 @@ def JobTransformImage(job): amt=[jex.value for jex in job.extra if jex.name == "amt"][0] e=session.query(Entry).join(File).filter(Entry.id==id).first() print( f"JobTransformImage: job={job.id}, id={id}, amt={amt}" ) - im = Image.open( e.FullPathOnFS() ) if amt == "fliph": AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} horizontally" ) + im = Image.open( e.FullPathOnFS() ) out = im.transpose(Image.FLIP_LEFT_RIGHT) + out.save( e.FullPathOnFS() ) elif amt == "flipv": AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} vertically" ) + im = Image.open( e.FullPathOnFS() ) out = im.transpose(Image.FLIP_TOP_BOTTOM) + out.save( e.FullPathOnFS() ) else: AddLogForJob(job, f"INFO: Rotating {e.FullPathOnFS()} by {amt} degrees" ) - if im.format == 'JPEG': - im=ImageOps.exif_transpose(im) - out = im.rotate(int(amt), expand=True) - out.save( e.FullPathOnFS() ) - print( f"JobTransformImage DONE transform: job={job.id}, id={id}, amt={amt}" ) + p = subprocess.run([PA_EXIF_ROTATER, e.FullPathOnFS(), amt ] ) settings = session.query(Settings).first() e.file_details.thumbnail, _ , _ = GenThumb( e.FullPathOnFS(), settings.auto_rotate ) e.file_details.hash = md5( job, e ) diff --git a/shared.py b/shared.py index d76196f..4c7e580 100644 --- a/shared.py +++ b/shared.py @@ -40,17 +40,20 @@ OLDEST_LOG_LIMIT = 5 if hostname == "lappy": PA_JOB_MANAGER_HOST="localhost" DB_URL = 'postgresql+psycopg2://pa:for_now_pa@localhost:5432/pa' - PA_EXIF_ROTATER = './utils/pa_exifautotran' + PA_EXIF_AUTOROTATE = './utils/pa_exifautotran' + PA_EXIF_ROTATER = './utils/pa_rotate' # if we dont set the env or we are explicitly DEV, run web server on localhost & db on mara (port 65432) elif 'ENV' not in os.environ or os.environ['ENV'] == "development": PA_JOB_MANAGER_HOST="localhost" DB_URL = 'postgresql+psycopg2://pa:for_now_pa@mara.ddp.net:65432/pa' - PA_EXIF_ROTATER = './utils/pa_exifautotran' + PA_EXIF_AUTOROTATE = './utils/pa_exifautotran' + PA_EXIF_ROTATER = './utils/pa_rotate' # if we explicitly are on PROD, run web server on localhost (pa_web container) & db on mara (port 5432 on padb container)- only accessed via internal docker ports) elif os.environ['ENV'] == "production": PA_JOB_MANAGER_HOST="localhost" DB_URL = 'postgresql+psycopg2://pa:for_now_pa@padb/pa' - PA_EXIF_ROTATER = '/code/utils/pa_exifautotran' + PA_EXIF_AUTOROTATE = '/code/utils/pa_exifautotran' + PA_EXIF_ROTATER = '/code/utils/pa_rotate' else: print( "ERROR: I do not know which environment (development, etc.) and which DB (on which host to use)" ) exit( -1 ) @@ -132,7 +135,7 @@ def GenThumb(fname,auto_rotate): im_orig = Image.open(fname) if im_orig.format == 'JPEG': # run cmdline util to re-orient jpeg (only changes if needed, and does it losslessly) - p = subprocess.run([PA_EXIF_ROTATER,fname] ) + p = subprocess.run([PA_EXIF_AUTOROTATE,fname] ) im=Image.open(fname) else: im=im_orig diff --git a/utils/pa_rotate b/utils/pa_rotate new file mode 100755 index 0000000..71bbf8f --- /dev/null +++ b/utils/pa_rotate @@ -0,0 +1,9 @@ +#!/bin/sh + +echo "start" +b=`basename $1` +echo "b=$b" +mv $1 /tmp/$b +echo "mv $1 to /tmp/$b" +jpegtran -outfile $1 -rotate $2 /tmp/$b +echo "done jpegtran"