use jpegtran to do lossless 90 rotations
This commit is contained in:
@@ -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 )
|
||||
|
||||
11
shared.py
11
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
|
||||
|
||||
9
utils/pa_rotate
Executable file
9
utils/pa_rotate
Executable file
@@ -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"
|
||||
Reference in New Issue
Block a user