1#!/usr/bin/perl
2#  Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization
3#  dedicated to making software imaging solutions freely available.
4#
5#  You may not use this file except in compliance with the License.  You may
6#  obtain a copy of the License at
7#
8#    https://imagemagick.org/script/license.php
9#
10#  Unless required by applicable law or agreed to in writing, software
11#  distributed under the License is distributed on an "AS IS" BASIS,
12#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13#  See the License for the specific language governing permissions and
14#  limitations under the License.
15#
16# Test montage method.
17#
18BEGIN { $| = 1; $test=1, print "1..19\n"; }
19END {print "not ok 1\n" unless $loaded;}
20use Image::Magick;
21$loaded=1;
22
23require 't/subroutines.pl';
24
25chdir 't' || die 'Cd failed';
26
27#
28# 1) Test montage defaults (except no label that requires an exact font)
29#
30testMontage( q//,
31  q/background=>'#696e7e'/,
32  '6f8304c88f6dae4ade2a09fb7b4562cf2c09978cb30b025afaf9bd5805a4e75e');
33
34#
35# 2) Test Center gravity
36#    Image should be centered in frame
37#
38++$test;
39testMontage( q//,
40  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'Center'/,
41  '4fa94e68dc41fa0fda3469e6b8ebc4c07be6ef656405a1ea8f9ed8b00aa07552');
42
43#
44# 3) Test NorthWest gravity
45#    Image should be at top-left in frame
46#
47++$test;
48testMontage( q//,
49  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'NorthWest'/,
50  '24adcfa00f2c69d10fda815c9572bd7f621adb93a58a9c3c85657060929da4d0');
51
52#
53# 4) Test North gravity
54#    Image should be at top-center of frame
55#
56++$test;
57testMontage( q//,
58  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'North'/,
59  '70bb1be5bad21d5dd545ffe62eeb90052a037fcc1613aaa3f3b3c4d4c6138e8a');
60
61#
62# 5) Test NorthEast gravity
63#    Image should be at top-right of frame
64#
65++$test;
66testMontage( q//,
67  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'NorthEast'/,
68  '116668aedcc616527dabac2c07ea597d5cc26e3aaf33db14d8ce796892bc1f1c');
69
70#
71# 6) Test West gravity
72#    Image should be at left-center of frame
73#
74++$test;
75testMontage( q//,
76  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'West'/,
77  'abb3104224d07ba50235e750c8009b231a0e6aaa596fb2ec3703b2061a59abc3');
78
79#
80# 7) Test East gravity
81#    Image should be at right-center of frame.
82#
83++$test;
84testMontage( q//,
85  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'East'/,
86  '8723423ac9151136571b6e8f053fc60b09a8ec18d94e4fbc29c492de032c9a7d');
87
88#
89# 8) Test SouthWest gravity
90#    Image should be at bottom-left of frame
91#
92++$test;
93testMontage( q//,
94  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'SouthWest'/,
95  'abc713cef6d9923859854c164b83ed7b92f6c15ae6924207bb8a38063395650b');
96
97#
98# 9) Test South gravity
99#    Image should be at bottom of frame
100#
101++$test;
102testMontage( q//,
103  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'South'/,
104  '9992d5631703aa64d4fb87c71881df39aeff1cc821320d0a43f00897e7cd6a17');
105
106#
107# 10) Test SouthEast gravity
108#     Image should be at bottom-right of frame.
109#
110++$test;
111testMontage( q//,
112  q/background=>'#696e7e',  geometry=>'90x80+5+5>', gravity=>'SouthEast'/,
113  'ae4322daebfbd3fe448afffe33aa599be518eaebb3515793e1efe6dc33939383');
114
115#
116# 11) Test Framed Montage
117#
118# Image border color 'bordercolor' controls frame background color
119# Image matte color 'mattecolor' controls frame color
120# Image pen color 'pen' controls label text foreground color
121++$test;
122testMontage( q/bordercolor=>'blue', mattecolor=>'red'/,
123  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80+3+3>', frame=>'8x10',
124  borderwidth=>'0', gravity=>'Center', background=>'gray'/,
125  '40835871b13232243ba4d2bcb244d06958556a24a9624e793f5c4c291d64f322',
126  '531d0d485d55a5b585cab3f64b37da81a109fbaa91aa44a038fa916421780f14',
127  '40835871b13232243ba4d2bcb244d06958556a24a9624e793f5c4c291d64f322');
128
129#
130# 12) Test Framed Montage with drop-shadows
131#
132++$test;
133testMontage( q/bordercolor=>'blue', mattecolor=>'red'/,
134  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80+6+6>', frame=>'8x10',
135  borderwidth=>'0', gravity=>'Center', shadow=>'True',background=>'gray'/,
136  'c11aad0132d57f84ec42aad600f2c9f3fdb9ad5a64235cb08a296c0f1a509f6d',
137  '51b8db221299cea2bea84b11247bfa4b41a0cc3a9af27ff4c20f9c23ee7f2117',
138  '7b8d2dbf3ee22440fd5df36090922bb599ab6b4df216282cc51bb4328d03a211');
139
140#
141# 13) Test Framed Montage with drop-shadows and background texture
142#
143++$test;
144testMontage( q/bordercolor=>'blue', mattecolor=>'red'/,
145  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80+6+6>', frame=>'8x10',
146  borderwidth=>'0', gravity=>'Center', shadow=>'True', texture=>'granite:'/,
147  '292b115e08fcef4888ee3f386c6c3aff1c0ed008e34697435c1e4116a75149ed',
148  'e2fe0b56decf6fd791813e99d7b0f40646a479589e7519d97e2f92969dd17a1e',
149  '2c6bc96010beb38d123cc712ded96ecbbef40265a80e9638e9ea9034d64227f3');
150
151#
152# 14) Test Un-bordered, Un-framed Montage
153#
154++$test;
155testMontage( q//,
156  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80+6+6>', mode=>'Unframe',
157  borderwidth=>'0', gravity=>'Center', background=>'gray'/,
158  'b9df49be9b056ed8fd4c4eb7621aa073df65740e4aaebc038c294cb3731f334f');
159
160#
161# 15) Test Bordered, Un-framed Montage (mode=>'Unframe')
162#
163++$test;
164testMontage( q/bordercolor=>'red'/,
165  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80+6+6>', mode=>'Unframe',
166  borderwidth=>'5', gravity=>'Center', background=>'gray'/,
167  '9d7d0f1886ef8d48f680567163d3a4583897d114c7abbb9da6a98f96fb629ebb');
168
169#
170# 16) Test Bordered, Un-framed Montage (mode=>'UnFrame')
171#
172++$test;
173testMontage( q/bordercolor=>'red'/,
174  q/ tile=>'4x4', geometry=>'90x80+6+6>', mode=>'UnFrame',
175  borderwidth=>'5', gravity=>'Center', background=>'gray'/,
176  '9d7d0f1886ef8d48f680567163d3a4583897d114c7abbb9da6a98f96fb629ebb');
177
178#
179# 17) Test Un-bordered, Un-framed Montage with 16x1 tile
180#
181++$test;
182testMontage( q//,
183  q/background=>'#696e7e',  tile=>'16x1', geometry=>'90x80+0+0>', mode=>'Unframe',
184  borderwidth=>'0', gravity=>'Center', background=>'gray'/,
185  '9f6f0c7ff76283b0f8747c1e12bd810bda0c47ab8cf78a4ae584556a64c88213');
186
187#
188# 18) Test concatenated thumbnail Montage (concatenated via special Concatenate mode)
189#     Thumbnails should be compacted tightly together in a grid
190#
191++$test;
192testMontage( q//,
193  q/background=>'#696e7e',  tile=>'4x4', geometry=>'90x80>', mode=>'Concatenate'/,
194  'dfede51035a4ce942e3ba9909f85eb497c134a60bb8363afded0ae81f73f0e46');
195#
196# 19) Test concatenated thumbnail Montage (concatentated by setting params to zero)
197#     Thumbnails should be compacted tightly together in a grid
198#
199++$test;
200testMontage( q//,
201  q/background=>'#696e7e',  tile=>'4x4', geometry=>'+0+0', mode=>'Unframe', shadow=>'False',
202  borderwidth=>'0', background=>'gray'/,
203  'dfede51035a4ce942e3ba9909f85eb497c134a60bb8363afded0ae81f73f0e46');
204