liyujie
2025-08-28 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/sh
#
#  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
#  dedicated to making software imaging solutions freely available.
#
#  You may not use this file except in compliance with the License.  You may
#  obtain a copy of the License at
#
#    https://imagemagick.org/script/license.php
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
. ./common.shi
. ${srcdir}/tests/common.shi
 
depth=`eval ${MAGICK} xc:none -format '%[fx:QuantumRange]' info:-`
if [ "X$depth" = "X255" ]; then
  echo "1..1"
  echo "ok"
  exit 0
fi
echo "1..19"
 
# how to generate a one pixel (average rose) color and output its values
in="rose: -scale 1x1"    # a one pixel image of the average color.
out="-format '%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]' info:-"
 
# ----------------
 
# Colors to compare results to.
error=false
average=`eval ${MAGICK} "$in" -noop "$out"`
too_dark=`eval ${MAGICK} "$in" -colorspace RGB "$out"`
too_light=`eval ${MAGICK} "$in" -set colorspace RGB -colorspace sRGB "$out"`
format='%-30s%s\n'        # results formating
format2='%-30s%-14s%s\n'
 
printf "$format2" "Average \"rose:\" Color"  "$average" "sRGB(rose)"
printf "$format2" "Too Dark Color"  "$too_dark"  "sRGB(rose)->RGB result"
printf "$format2" "Too Light Color" "$too_light" "RGB(rose)->sRGB result"
echo ''
 
#
# Sanity checks
#
# NOTE: as a extra validation on sanity checks below...
#    eval ${MAGICK} "$in" -gamma .454545 "$out"
# produces a value of  74,25,20   which is close to 73,26,21 below.
#    eval ${MAGICK} "$in" -gamma 2.2 "$out"
# produces a value of  198,158,151  whcih is close to 199,160,152 below.
#
# Actual values used below come from IM v6.5.4-7 colorspace conversions
#
error=false
if [ "X$average" != "X146,89,80" ]; then
  echo "Sanity Failure: Average expected to be 145,89,80 - ABORTING"
  error=true
fi
if [ "X$too_dark" != "X73,26,21" ]; then
  echo "Sanity Failure: Too Dark expected to be 73,26,21 - ABORTING"
  error=true
fi
if [ "X$too_light" != "X199,160,152" ]; then
  echo "Sanity Failure: Too Light expected to be 199,160,152 - ABORTING"
  error=true
fi
$error && exit 1
 
test_color() {
  test="sRGB"
  cs='';
  for i in "$@"; do
    test="${test}->$i"        # format of the test being performed
    cs="$cs -colorspace $i"   # colorspace operations to perform test
  done
  color=`eval ${MAGICK} "$in" $cs "$out"`
 
  if [ "X$color" = "X$average" ]; then
    return 0
  fi
  # Its failed the round-trip test, now report how it failed!
  error=true
  if [ "X$color" = "X$too_light" ]; then
    return 1
  fi
  if [ "X$color" = "X$too_dark" ]; then
    return 1
  fi
  return 1
}
 
# ----------------
 
test_color RGB     sRGB && echo "ok" || echo "not ok"
 
test_color XYZ     sRGB && echo "ok" || echo "not ok"
test_color XYZ RGB sRGB && echo "ok" || echo "not ok"
test_color RGB XYZ sRGB && echo "ok" || echo "not ok"
 
test_color LAB     sRGB && echo "ok" || echo "not ok"
test_color XYZ LAB sRGB && echo "ok" || echo "not ok"
test_color LAB XYZ sRGB && echo "ok" || echo "not ok"
test_color RGB LAB sRGB && echo "ok" || echo "not ok"
test_color LAB RGB sRGB && echo "ok" || echo "not ok"
 
test_color CMY   sRGB && echo "ok" || echo "not ok"
test_color CMYK  sRGB && echo "ok" || echo "not ok"
test_color HSL   sRGB && echo "ok" || echo "not ok"
test_color HSB   sRGB && echo "ok" || echo "not ok"
test_color HWB   sRGB && echo "ok" || echo "not ok"
test_color Log   sRGB && echo "ok" || echo "not ok"
test_color YIQ   sRGB && echo "ok" || echo "not ok"
test_color YUV   sRGB && echo "ok" || echo "not ok"
test_color YCbCr sRGB && echo "ok" || echo "not ok"
test_color OHTA  sRGB && echo "ok" || echo "not ok"
: