[solved] {FR} How to generate a contact sheet as a grid of 8 ID pictures from command-line tool "montage" by ImageMagick

Questions and postings pertaining to the usage of ImageMagick regardless of the interface. This includes the command-line utilities, as well as the C and C++ APIs. Usage questions are like "How do I use ImageMagick to create drop shadows?".
Post Reply
fabore
Posts: 2
Joined: 2017-11-12T11:20:00-07:00
Authentication code: 1152

[solved] {FR} How to generate a contact sheet as a grid of 8 ID pictures from command-line tool "montage" by ImageMagick

Post by fabore »

Comment créer une planche photo 10x15 cm d'une photo d'identité 45x35 mm dupliquée 8 fois grâce à la ligne de commande "montage" délivrée par ImageMagick

Ceci est solution locale et adaptable à votre goût. Elle vous permet d'obtenir une photo de haute résolution à l'encontre des services en ligne gratuits déjà existants. J'ai essayé "convertir-une-image.com" mais il réduit la résolution de la photo finale beaucoup trop à mon goût.

Il s'agit de faire quelques calculs de proportion pour que l'impression sorte à la bonne taille dans une imprimante à papier photo de 10 x 15 cm, format standard, en France du moins.

En réalité, nous parlerons en millimètres (mm) tandis quand virtuel nous parlerons en pixels. Respectivement Hauteur X Largeur

Il faut que le rapport en pixels soit le même ou presque qu'en mm afin d'obtenir les mêmes proportions ... ou presque.

Le rapport d'une photo 100 x 150 mm est de :

150/100=1,5

En France, pour la création d'un titre d'identité, l'état demande une photo au format 45 x 35 mm
https://www.service-public.fr/particuli ... its/F10619

Le rapport d'une photo d'identité seule est donc de :

45/35 ≊ 1,2857

≊ (U+224A), yet another combination of "≈" and "=", used to indicate equivalence or approximate equivalence
https://en.wikipedia.org/wiki/Approximation#Unicode

Vos photos finales devront faire 45 x 35 sur une planche de 100 x 150.
vous pouvez donc mettre 8 photos d'identité sur 2 lignes X 4 colonnes :

Image
planche ID x 8

les marges autour de chaque photo devront être de 2,5mm en hauteur et de 1,25mm en largeur soit:
en hauteur : 2x(45+2x2,5)=100 mm
en largeur : 4x(35+2x1,25)=150 mm


conversion de la marge de millimètre à pixel :

quels sont les rapports pour les marges ? :
hauteur : 45/2,5=18
largeur : 35/1,25=28

vous réutiliserez ces rapports pour calculer le nombre de pixels qui constitueront les marges.

Pour illustrer mon exemple tout au long de cet article, j'utiliserai une PHOTO.JPG dont les dimensions sont de 3553 x 2778 pixels, soit un rapport de :

3553 / 2778 ≊ 1,2923

le rapport n'est donc pas idéal pour réaliser notre photo montage en ligne de commande mais pour le résultat final sur papier, nous nous satisferont de ce petit écart . Pour se rapprocher du rapport de 1,2857 nous allons donc agrandir la hauteur. A noter que nous pourrions plutôt choisir de réduire la largeur en rognant (crop) l'image.

Pour agrandir la hauteur, nous allons rajouter une marge blanche qui s'insère automatiquement grâce à la commande montage. Nous calculons la marge à rajouter en hauteur

2778 x 1,2857 ≊ 3572

3572 - 3553 = 19

soit, nous devons rajouter 19 pixels de plus pour les marges en hauteur que pour les marges en largeur, ce qui nous donne DONC une marge de 9,5 pixels que nous arrondirons à 9 en haut de la photo et une autre aussi en bas.

par exemple, si nous voulons une marge de 5 pixels en latéral de la photo 45 x 35 alors la marge basse et haute sera de : 5 + 9 = 14 pixels

voici la première mise en application dans un terminal :

ATTENTION ! placez vous dans un répertoire où seule une image au format .JPG est présente puis copiez-collez cette commande.

Code: Select all

montage *.jpg -geometry +5+14 plancheID.jpeg
nous obtenons une image .jpEg avec un nouveau rapport de 3581/2788 ≊ 1,2844
ce qui sera considéré comme recevable car nous sommes assez proche du rapport idéal de 1,2857.

Notez que le fichier de sortie est au format .JPEG et non pas .JPG , afin que si nous relançons la ligne de commande de nouveau, "montage" ne l’inclura pas.

soit en pixel sur ma photo à l'origine de 3553x2778

3553/18=197,388
2778/28=99,214

nous n'oublions pas de rajouter 9 pixels en hauteur pour compensé le manque de la photo soit 197+9=206

Code: Select all

montage *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg -geometry +99+206 plancheid.jpeg
soit nous obtenons une planche de 8 photos de 7930*11904 pixels

nous vérifions le rapport :
11904÷7930 = 1,5011 ... on est presque bon !! pas loin de 150/100 = 1,5

pour se tendre vers la vérité nous diminuons la largeur d'un pixel soit :

Code: Select all

montage *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg -geometry +98+206 plancheid.jpeg
11896/7930 = 1,50012
voilà le rapport que nous obtenons, nous ne pourront pas faire mieux dans cette résolution.


addendum :

http://www.imagemagick.org/Usage/montage/
https://imagemagick.org/script/montage.php
fabore
Posts: 2
Joined: 2017-11-12T11:20:00-07:00
Authentication code: 1152

Re: [solved] {FR} How to generate a contact sheet as a grid of 8 ID pictures from command-line tool "montage" by ImageMa

Post by fabore »

Hello,

this is a solution i managed to generate a grid from one picture, but i'm wondering if exist a cleaner code than repeating

Code: Select all

*.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg
8 times ?
I mean, i execute this command in a folder with just the one picture i want to duplicate.

thanks for your patience
  • Fedora 22
    ImageMagick 6.8.8-10 Q16 x86_64 2015-03-10
    shell
User avatar
GeeMack
Posts: 718
Joined: 2015-12-01T22:09:46-07:00
Authentication code: 1151
Location: Central Illinois, USA

Re: [solved] {FR} How to generate a contact sheet as a grid of 8 ID pictures from command-line tool "montage" by ImageMa

Post by GeeMack »

fabore wrote: 2017-11-12T11:39:10-07:00this is a solution i managed to generate a grid from one picture, but i'm wondering if exist a cleaner code than repeating

Code: Select all

*.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg *.jpg
8 times ?
Try using the "-duplicate" operator with something like this...

Code: Select all

... *.jpg -duplicate 7 ...
Post Reply