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
|
from sqlalchemy.orm import scoped_session
|
||||||
|
|
||||||
### LOCAL FILE IMPORTS ###
|
### 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
|
from datetime import datetime, timedelta, date
|
||||||
|
|
||||||
### PYTHON LIB IMPORTS ###
|
### PYTHON LIB IMPORTS ###
|
||||||
@@ -45,6 +45,7 @@ import face_recognition
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import ffmpeg
|
import ffmpeg
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
# global debug setting
|
# global debug setting
|
||||||
@@ -1901,21 +1902,20 @@ def JobTransformImage(job):
|
|||||||
amt=[jex.value for jex in job.extra if jex.name == "amt"][0]
|
amt=[jex.value for jex in job.extra if jex.name == "amt"][0]
|
||||||
e=session.query(Entry).join(File).filter(Entry.id==id).first()
|
e=session.query(Entry).join(File).filter(Entry.id==id).first()
|
||||||
print( f"JobTransformImage: job={job.id}, id={id}, amt={amt}" )
|
print( f"JobTransformImage: job={job.id}, id={id}, amt={amt}" )
|
||||||
im = Image.open( e.FullPathOnFS() )
|
|
||||||
|
|
||||||
if amt == "fliph":
|
if amt == "fliph":
|
||||||
AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} horizontally" )
|
AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} horizontally" )
|
||||||
|
im = Image.open( e.FullPathOnFS() )
|
||||||
out = im.transpose(Image.FLIP_LEFT_RIGHT)
|
out = im.transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
|
out.save( e.FullPathOnFS() )
|
||||||
elif amt == "flipv":
|
elif amt == "flipv":
|
||||||
AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} vertically" )
|
AddLogForJob(job, f"INFO: Flipping {e.FullPathOnFS()} vertically" )
|
||||||
|
im = Image.open( e.FullPathOnFS() )
|
||||||
out = im.transpose(Image.FLIP_TOP_BOTTOM)
|
out = im.transpose(Image.FLIP_TOP_BOTTOM)
|
||||||
|
out.save( e.FullPathOnFS() )
|
||||||
else:
|
else:
|
||||||
AddLogForJob(job, f"INFO: Rotating {e.FullPathOnFS()} by {amt} degrees" )
|
AddLogForJob(job, f"INFO: Rotating {e.FullPathOnFS()} by {amt} degrees" )
|
||||||
if im.format == 'JPEG':
|
p = subprocess.run([PA_EXIF_ROTATER, e.FullPathOnFS(), amt ] )
|
||||||
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}" )
|
|
||||||
settings = session.query(Settings).first()
|
settings = session.query(Settings).first()
|
||||||
e.file_details.thumbnail, _ , _ = GenThumb( e.FullPathOnFS(), settings.auto_rotate )
|
e.file_details.thumbnail, _ , _ = GenThumb( e.FullPathOnFS(), settings.auto_rotate )
|
||||||
e.file_details.hash = md5( job, e )
|
e.file_details.hash = md5( job, e )
|
||||||
|
|||||||
11
shared.py
11
shared.py
@@ -40,17 +40,20 @@ OLDEST_LOG_LIMIT = 5
|
|||||||
if hostname == "lappy":
|
if hostname == "lappy":
|
||||||
PA_JOB_MANAGER_HOST="localhost"
|
PA_JOB_MANAGER_HOST="localhost"
|
||||||
DB_URL = 'postgresql+psycopg2://pa:for_now_pa@localhost:5432/pa'
|
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)
|
# 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":
|
elif 'ENV' not in os.environ or os.environ['ENV'] == "development":
|
||||||
PA_JOB_MANAGER_HOST="localhost"
|
PA_JOB_MANAGER_HOST="localhost"
|
||||||
DB_URL = 'postgresql+psycopg2://pa:for_now_pa@mara.ddp.net:65432/pa'
|
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)
|
# 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":
|
elif os.environ['ENV'] == "production":
|
||||||
PA_JOB_MANAGER_HOST="localhost"
|
PA_JOB_MANAGER_HOST="localhost"
|
||||||
DB_URL = 'postgresql+psycopg2://pa:for_now_pa@padb/pa'
|
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:
|
else:
|
||||||
print( "ERROR: I do not know which environment (development, etc.) and which DB (on which host to use)" )
|
print( "ERROR: I do not know which environment (development, etc.) and which DB (on which host to use)" )
|
||||||
exit( -1 )
|
exit( -1 )
|
||||||
@@ -132,7 +135,7 @@ def GenThumb(fname,auto_rotate):
|
|||||||
im_orig = Image.open(fname)
|
im_orig = Image.open(fname)
|
||||||
if im_orig.format == 'JPEG':
|
if im_orig.format == 'JPEG':
|
||||||
# run cmdline util to re-orient jpeg (only changes if needed, and does it losslessly)
|
# 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)
|
im=Image.open(fname)
|
||||||
else:
|
else:
|
||||||
im=im_orig
|
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