OVH Cloud OVH Cloud

photo en fullscreen ?

13 réponses
Avatar
Une Bévue
j'ai dans une page une photo réduite en taille et je voudrais passer
l'original en fullscreen.

comment faire ?

grosso-modo j'ai deux images :

l'une fait 640x460 (thumb obtenu par imagemagick) l'autre, l'original
fait, entre autre, 2848x4288 ou 4288x2848,.

comme je gère plusieurs APN, le format des photos varie.

déjà est-ce que le fulscreen tient compte de l'exif (horizontal/verticaal) ?

3 réponses

1 2
Avatar
Une Bévue
Le 19/03/2016 09:48, Une Bévue a écrit :
question, y a t'il sous python un équivalent de exiftool ?



c'est facile avec :
<http://stackoverflow.com/questions/10075115/call-exiftool-from-a-python-script>

je remarque d'ailleurs qu'exiftool peut sortir en format json
Avatar
Pierre Maurette
Une Bévue :
Le 18/03/2016 15:35, Pierre-Alain Dorange a écrit :
Vaudrait mieux Pillow, le successeur de PIL qui n'est plus mis à jour
depuis 2009.
Pillow est plutot bien compatible PIL (même classes)
<https://pillow.readthedocs.org/en/3.1.x/>



bon je viens de faire deux tests (à partir de la page :
<https://pillow.readthedocs.org/en/3.1.x/handbook/tutorial.html>)

il faudrait que j'apprenne python et Pillow ))

question, y a t'il sous python un équivalent de exiftool ?

j'ai besoin de lire l'Orientation de l'image pour en faire une vignette dans
le bon sens...



J'ai pas mal bricolé dans ce sens. J'ai perdu du temps avec les divers
"wrappers", je vous conseille vraiment d'appeler directement exiftool
via subprocess. C'est multiplateforme, à partir du moment où exiftool
est dans le PATH ou si vous en posez une copie à coté de votre script.
Un exemple (c'est une méthode juste copiée - collée):

def getExifOrientation(self, filename):
readOrientationcmd = 'exiftool -exif:Orientation%s"%s"'
try:
output = subprocess.check_output(readOrientationcmd %
(self.subprocessencoding, filename), shell=True,
startupinfo=self.startupinfo)
s = output.decode('utf-8').strip().split(':')[-1].strip()
except KeyError:
s = u'râté !'
return s

--
Pierre Maurette
Avatar
Une Bévue
Le 19/03/2016 11:20, Pierre Maurette a écrit :
j'ai besoin de lire l'Orientation de l'image pour en faire une
vignette dans le bon sens...



J'ai pas mal bricolé dans ce sens. J'ai perdu du temps avec les divers
"wrappers", je vous conseille vraiment d'appeler directement exiftool
via subprocess. C'est multiplateforme, à partir du moment où exiftool
est dans le PATH ou si vous en posez une copie à coté de votre script.
Un exemple (c'est une méthode juste copiée - collée):

def getExifOrientation(self, filename):
readOrientationcmd = 'exiftool -exif:Orientation%s"%s"'
try:
output = subprocess.check_output(readOrientationcmd %
(self.subprocessencoding, filename), shell=True,
startupinfo=self.startupinfo)
s = output.decode('utf-8').strip().split(':')[-1].strip()
except KeyError:
s = u'râté !'
return s




oui, oui, merci, c'est ce que j'ai fait, voici mon script :
--------------------------------------------------------------------------------
#! /usr/bin/python

from __future__ import print_function
import os, sys
import re
import subprocess
import json
from PIL import Image, ImageOps, ImageDraw

class ExifTool(object):

sentinel = "{ready}n"

def __init__(self, executable="/usr/local/bin/exiftool"):
self.executable = executable

def __enter__(self):
self.process = subprocess.Popen(
[self.executable, "-stay_open", "True", "-@", "-"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
return self

def __exit__(self, exc_type, exc_value, traceback):
self.process.stdin.write("-stay_opennFalsen")
self.process.stdin.flush()

def execute(self, *args):
args = args + ("-executen",)
self.process.stdin.write(str.join("n", args))
self.process.stdin.flush()
output = ""
fd = self.process.stdout.fileno()
while not output.endswith(self.sentinel):
output += os.read(fd, 4096)
return output[:-len(self.sentinel)]

def get_metadata(self, *filenames):
return json.loads(self.execute("-G", "-j", "-n", *filenames))

def get_orientation(self, *filenames):
p = re.compile('d+')
o = self.execute("-EXIF:Orientation", "-S", *filenames)
m = p.findall(o)
if m:
return int(m[0])
else:
return 0


size = (250, 188)

for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + "_thumb.png"
with ExifTool() as e:
o = e.get_orientation(infile)
if infile != outfile:
try:
im = Image.open(infile).convert('RGBA')
out = im.rotate(-o, expand=True)
out.thumbnail(size, Image.ANTIALIAS)
w = out.size[0]
hl = int((250 -w)/2)
hr = 250 -w - hl
ltrb_border=(hl, 0, hr, 0)
draw_with_border = ImageOps.expand(out, border=ltrb_border,
fill=(255, 255, 255, 0))
draw_with_border.save(outfile, "PNG")
except IOError:
print("cannot create thumbnail for", infile)

--------------------------------------------------------------------------------

à partir d'une image il réalise un thumb correctement orienté et de
taille constante 250x188 avec des borders transparents.

n'hésitez pas à critiquer mon petit script, c'est la première fois que
j'en écrit un en python ))

sans doute des choses inutiles dans la class ExifTool, comme par ex la
sortie json, encore que je me demande si, pour chaque image je ne vais
pas créer un fichier json ce qui m'éviterait à repasser par exiftool.
1 2