Le
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #26542014
jdd :
Bonjour,
J'ai un nouveau cadre photo qui a plein de qualités, mais qui met toutes les
images plein cadre, y compris les images verticales qui devraient avoir du
vide de part et d'autre (le cadre est horizontal).
Je cherche donc la syntaxe d'imagemagick qui me donnerait une image 1200x800
à partir d'une image disons YYY x 800 (avec YYY plus petit que 1200.
ce qui complique les choses et que mes images ont des origines diverses, donc
n'ont pas toutes le même rapport wxh
j'ai à peu près trouvé, mais je bute sur la syntaxe de bash :-(
actuellement j'en suis là. le but est de redimensionner les images à la
taille maxi acceptée par le cadre (1200x800), trouver la largeur et en
déduire la largeur de bordure à mettre de chaque côté. w est la largeur
trouvé initiale 600-$w devrait être la largeur du cadre (de chaque coté).
A la main identify renvoie bien la bonne valeur, mogrify fait bien le travail
(en place), c'est le passage de variable qui ne va pas...
merci de toute aide
#!/bin/bash
for a ; do
echo $a #pour contrôle de ce que ça fait :-)
mogrify $a -resize 1200x800 ; # aucune ne doit dépasser 1200 et 800
w='identify -format "%w"' ;
mogrify $a -bordercolor "#dfdfdf" -border (600-$w)x0 ;
done
exit

Vu vos fréquents besoins en outillage et vos hautes compétences en
informatique, vous auriez avantage à vous créer un atelier Python. Je
vous conseille vivement PyCharm Community.
Je refais le "cahier des charges": pour chaque image, je crée une image
1200 x 800, je réduis l'image comme il faut et je la colle dans la
grande, centrée. Je peux ajouter une marge incompressible (8 pixels va
bien), c'est mieux parfois. Une autre version retourne l'image au
besoin, et utilise (par défaut) un fond blanc, elle est destinée à une
impression massive en 10x15 (ou moins) pas cher, on demande alors une
imprssion sans marge.
Le code (running, testé également sous Linux Mint):
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import os
from PIL import Image
ROOTPATH = r'X:Exportramecourt laura'
EXTJPG = ('jpg', 'jpeg')
SAVETAG = '_BUP'
ROOTSAVE = ROOTPATH + SAVETAG
BGCOLOR = 'black'
(W, H) = size = 1200, 800
MINIMARGIN = 8
(WW, HH) = sizesize = W - (MINIMARGIN << 1), H - (MINIMARGIN << 1)
_EXTJPG = list(map(lambda x: '.' + x.strip('.').lower(), EXTJPG))
def getTheBinz(image, type='cadre'):
img = Image.open(image)
zob = -1 if (img.size[0] < img.size[1]) and type is not 'cadre'
else 1
newimg = Image.new('RGB', size[::zob], 'white' if type is not
'cadre' else BGCOLOR)
img.thumbnail(sizesize[::zob], Image.BICUBIC)
width, height = img.size[::zob]
mw, mh = ((W - width) >> 1, (H - height) >> 1)[::zob]
newimg.paste(img, (mw, mh))
return newimg
def doTheStuff(image, root, ROOTPATH, ROOTSAVE):
targetfolder = root.replace(ROOTPATH, ROOTSAVE)
if not os.path.isdir(targetfolder): os.makedirs(targetfolder)
getTheBinz(os.path.join(root, image),
'cadre').save(os.path.join(targetfolder, image))
if __name__ == '__main__':
for root, dirs, files in os.walk(ROOTPATH):
[doTheStuff(jpeg, root, ROOTPATH, ROOTSAVE) for jpeg in files
if
((os.path.splitext(jpeg)[1].lower() in _EXTJPG))]
--
Pierre Maurette
Publicité
Poster une réponse
Anonyme