exif orientation support

This commit is contained in:
2024-07-09 13:11:34 +02:00
committed by Flo Greistorfer
parent 7f5c7d80d5
commit e2033d7207

View File

@@ -11,7 +11,7 @@ from typing import Any, Dict, List, Optional, Tuple
import numpy as np import numpy as np
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
from tqdm.auto import tqdm from tqdm.auto import tqdm
from PIL import Image from PIL import Image, ImageOps, ExifTags
from rich_argparse import RichHelpFormatter, HelpPreviewAction from rich_argparse import RichHelpFormatter, HelpPreviewAction
try: try:
@@ -31,7 +31,7 @@ FAVICON_PATH = ".static/favicon.ico"
GLOBAL_CSS_PATH = ".static/global.css" GLOBAL_CSS_PATH = ".static/global.css"
DEFAULT_THEME_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), "themes", "default.css") DEFAULT_THEME_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), "themes", "default.css")
DEFAULT_AUTHOR = "Author" DEFAULT_AUTHOR = "Author"
VERSION = "1.9.8" VERSION = "1.9.9"
RAW_EXTENSIONS = [".3fr", ".ari", ".arw", ".bay", ".braw", ".crw", ".cr2", ".cr3", ".cap", ".data", ".dcs", ".dcr", ".dng", ".drf", ".eip", ".erf", ".fff", ".gpr", ".iiq", ".k25", ".kdc", ".mdc", ".mef", ".mos", ".mrw", ".nef", ".nrw", ".obm", ".orf", ".pef", ".ptx", ".pxn", ".r3d", ".raf", ".raw", ".rwl", ".rw2", ".rwz", ".sr2", ".srf", ".srw", ".tif", ".tiff", ".x3f"] RAW_EXTENSIONS = [".3fr", ".ari", ".arw", ".bay", ".braw", ".crw", ".cr2", ".cr3", ".cap", ".data", ".dcs", ".dcr", ".dng", ".drf", ".eip", ".erf", ".fff", ".gpr", ".iiq", ".k25", ".kdc", ".mdc", ".mef", ".mos", ".mrw", ".nef", ".nrw", ".obm", ".orf", ".pef", ".ptx", ".pxn", ".r3d", ".raf", ".raw", ".rwl", ".rw2", ".rwz", ".sr2", ".srf", ".srw", ".tif", ".tiff", ".x3f"]
IMG_EXTENSIONS = [".jpg", ".jpeg"] IMG_EXTENSIONS = [".jpg", ".jpeg"]
EXCLUDES = [".lock", "index.html", "manifest.json", ".sizelist.json", ".thumbnails", ".static"] EXCLUDES = [".lock", "index.html", "manifest.json", ".sizelist.json", ".thumbnails", ".static"]
@@ -206,7 +206,8 @@ def generate_thumbnail(arguments: Tuple[str, str]) -> None:
path = os.path.join(args.root_directory, ".thumbnails", folder.removeprefix(args.root_directory), os.path.splitext(item)[0]) + ".jpg" path = os.path.join(args.root_directory, ".thumbnails", folder.removeprefix(args.root_directory), os.path.splitext(item)[0]) + ".jpg"
if not os.path.exists(path) or args.regenerate_thumbnails: if not os.path.exists(path) or args.regenerate_thumbnails:
try: try:
with Image.open(os.path.join(folder, item)) as img: with Image.open(os.path.join(folder, item)) as imgfile:
img = ImageOps.exif_transpose(imgfile)
img.thumbnail((512, 512)) img.thumbnail((512, 512))
img.save(path, "JPEG", quality=75, optimize=True) img.save(path, "JPEG", quality=75, optimize=True)
except OSError: except OSError:
@@ -272,8 +273,19 @@ def list_folder(folder: str, title: str) -> None:
contains_files = True contains_files = True
if extsplit[1].lower() in args.file_extensions: if extsplit[1].lower() in args.file_extensions:
if not sizelist.get(item): if not sizelist.get(item):
exifdata = {}
with Image.open(os.path.join(folder, item)) as img: with Image.open(os.path.join(folder, item)) as img:
exif = img.getexif()
width, height = img.size width, height = img.size
for key, val in exif.items():
if key in ExifTags.TAGS:
exifdata[ExifTags.TAGS[key]] = val
else:
exifdata[key] = val
if exifdata != {} and (exifdata["Orientation"] == 6 or exifdata["Orientation"] == 8):
sizelist[item] = {"width": height, "height": width}
else:
sizelist[item] = {"width": width, "height": height} sizelist[item] = {"width": width, "height": height}
image = { image = {