utdev
utdev

Reputation: 4102

Imagemagick images next to each other with proper margin

I am trying to create a png file with a transparent background, in which I put images next to each other.

My command so far is this:

convert --% -bordercolor none -background none -gravity center logo.png -border 5x5 ( img1.jpg img2.jpg img3.jpg -border 5x5 +append ) ( img4.jpg img5.jpg img6.jpg -border 5x5 +append ) -append -border 5x5 -resize 720x480 output.png

it creates me this image

enter image description here

how do I have to change my command to make the image appear as following?

(I made the background grey so one can see the white text, the background shall be transparent later on)

enter image description here

I tried Mark Setchells suggestion the command so far looks like this:

convert -background none -bordercolor none -gravity west \
C:\xampp\htdocs\app\storage\images\Img_1.jpg label:"1" +swap -append label:"text 1" -append -write miff:- +delete \
C:\xampp\htdocs\app\storage\images\Img_2.jpg label:"2" +swap -append label:"text 2" -append -write miff:- +delete \
C:\xampp\htdocs\app\storage\images\Img_3.jpg label:"3" +swap -append label:"text 3" -append -write miff:- +delete \
C:\xampp\htdocs\app\storage\images\Img_4.jpg label:"4" +swap -append label:"text 4" -append -write miff:- +delete \
C:\xampp\htdocs\app\storage\images\Img_5.jpg label:"5" +swap -append label:"text 5" -append -write miff:- +delete \
C:\xampp\htdocs\app\storage\images\Img_6.jpg label:"6" +swap -append label:"text 6" -append miff:- |
montage -set label '' miff:- -background pink -tile 3x2 -geometry +15+5 miff:- |
convert -size 800x500 xc:gray80 -gravity center miff:- -composite -gravity north C:\xampp\htdocs\app\storage\images\logo.png -geometry +0+30 -composite C:\xampp\htdocs\app\storage\images\result.png

Upvotes: 2

Views: 2309

Answers (1)

Mark Setchell
Mark Setchell

Reputation: 207465

You can do it many ways. Here is one:

Method 1

#!/bin/bash
convert -background none -bordercolor none -gravity west \
   \( 1.png label:"1" +swap -append label:"text 1" -append -border 5x5 \) \
   \( 2.png label:"2" +swap -append label:"text 2" -append -border 5x5 \) +append \
   \( 3.png label:"3" +swap -append label:"text 3" -append -border 5x5 \) +append \
 \( \
   \( 4.png label:"4" +swap -append label:"text 4" -append -border 5x5 \) \
   \( 5.png label:"5" +swap -append label:"text 5" -append -border 5x5 \) +append \
   \( 6.png label:"6" +swap -append label:"text 6" -append -border 5x5 \) +append \
 \) -append  \
 -gravity center -extent 800x550 \
 -gravity north logo.png -geometry +0+30 -composite result.png

enter image description here

Method 2

This way you can use the first convert command to put the labels above and below each image and then stream all 6 labelled images into montage to do the grid layout (on pink) for you and from there back into another convert to create the gray background canvas and write the logo on at the top.

#!/bin/bash
convert -background none -bordercolor none -gravity west \
   1.png label:"1" +swap -append label:"text 1" -append -write miff:- +delete \
   2.png label:"2" +swap -append label:"text 2" -append -write miff:- +delete \
   3.png label:"3" +swap -append label:"text 3" -append -write miff:- +delete \
   4.png label:"4" +swap -append label:"text 4" -append -write miff:- +delete \
   5.png label:"5" +swap -append label:"text 5" -append -write miff:- +delete \
   6.png label:"6" +swap -append label:"text 6" -append miff:- |
   montage -set label '' miff:- -background pink -tile 3x2 -geometry +15+5 miff:- |
   convert -size 800x500 xc:gray80 -gravity center miff:- -composite -gravity north logo.png -geometry +0+30 -composite result.png

enter image description here

Sorry, I have no idea or understanding why Windows is so poor at parsing the command, but after much fiddling around, the following seems to work - I have no idea why!

convert -background none -bordercolor none -gravity west ^
   1.png label:"1" +swap -append label:"text 1" -append -write miff:- +delete ^
   2.png label:"2" +swap -append label:"text 2" -append -write miff:- +delete ^
   3.png label:"3" +swap -append label:"text 3" -append -write miff:- +delete ^
   4.png label:"4" +swap -append label:"text 4" -append -write miff:- +delete ^
   5.png label:"5" +swap -append label:"text 5" -append -write miff:- +delete ^
   6.png label:"6" +swap -append label:"text 6" -append miff:- | montage -set label "" miff:- ^
   -background pink -tile 3x2 -geometry +15+5 miff:- | convert -size 800x500 ^
   xc:gray80 -gravity center miff: -composite -gravity north logo.png -geometry +0+30 -composite result.png

Upvotes: 6

Related Questions