summaryrefslogtreecommitdiff
path: root/scripts/newbitmaps/old_releases/mario/make_bmp_images.sh
blob: d69c10ed1de2590483cd142816428554fffdcd94 (plain)
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
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash -e
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This adds text to our non-labeled recovery images.
#
# The source images should be 1366x800, with the expectation they'll be cropped
# to <screen geometry>, which is 1366x768 or 1280x800, have 2 lines of text
# overlayed at the bottom, and then be resized to 800x600 if on x86, otherwise
# same as <screen geometry>. On x86, resizing to 800x600 because the BIOS can
# then display them stretched to the full screen size.
#


# Require three args
if [ $# -ne "3" -o \( "$3" != "x86" -a "$3" != "arm" \) ]; then
  echo "Usage: $(basename $0) <HWID> <screen geometry> <x86/arm>" 1>&2
  exit 1
fi
HWID=$1
geom_crop=$2
geom_final='800x600!'
flag_final=
# If arm, make the final geometry as screen size and use 8bpp rle format.
if [ $3 = "arm" ]; then
  geom_final=$2
  flag_final="-colors 256 -compress rle"
fi

nicename=${HWID// /_}

# Default URL
URL='http://google.com/chromeos/recovery'

# Image parameters
geom_orig='1366x800'
bluecolor='#9ccaec'
bluefont="Helvetica-Narrow"
bluepointsize=30
whitefont="Helvetica-Narrow"
whitepointsize=48


# Temporary files
tmpdir=$(mktemp -d /tmp/tmp.bmp.XXXXXX)
trap "rm -rf $tmpdir" EXIT
img_orig="${tmpdir}/img_orig.bmp"
img_crop="${tmpdir}/img_crop.bmp"
img_txt="${tmpdir}/img_txt.bmp"
label_file="${tmpdir}/label.txt"
label_img="${tmpdir}/label.bmp"

# Output directories
thisdir=$(readlink -e $(dirname $0))
outdir="out_${nicename}"
[ -d "$outdir" ] || mkdir -p "$outdir"

function find_background_color {
  src_img=$1
  convert "$src_img" -crop '1x1+10+10!' txt:- | \
    perl -n -e 'print "$1" if m/(#[0-9a-f]+)/i;'
}

function process_one_file {
  src_img=$1

  # Figure out the filenames to use
  txt_file=${src_img%*.gif}.txt
  root=$(basename "$src_img")
  root=${root%*.*}
  # one more layer of heirarchy to match BIOS source tree
  dst_dir="${outdir}/${root}"
  [ -d "$dst_dir" ] || mkdir -p "$dst_dir"
  dst_img="${dst_dir}/${root}.bmp"
  echo "processing $root ..."

  # First, make sure we start with the right-size original
  bg=$(find_background_color "$src_img")
  convert "$src_img" -background "$bg" \
    -gravity center -extent $geom_orig "$img_orig"

  # Now crop that to the two target sizes
  convert "$img_orig" -gravity Center \
    -crop "$geom_crop"+0+0 +repage "$img_crop"

  # Add the labels in
  if [ -r "$txt_file" ]; then
    # The only way to change font and color in multiline text is to split each
    # line into a separate image and then composite them together. Ugh.
    # First, split each input line into a separate file.
    "${thisdir}/makelines.sh" -u "$URL" -m "$HWID" -d "$tmpdir" "$txt_file"
    # Convert each line file into an image file.
    for txtfile in ${tmpdir}/linetxt_*; do
      case "$txtfile" in
        *.txt)
          convert \
            -background "$bg" -fill "$bluecolor" \
            -font "$bluefont" -pointsize "$bluepointsize" \
            -bordercolor "$bg" -border 0x1 \
            label:'@'"$txtfile" "${txtfile%.*}".bmp
          ;;
        *.TXT)
          convert \
            -background "$bg" -fill "white" \
            -font "$whitefont" -pointsize "$whitepointsize" \
            -bordercolor "$bg" -border 0x10 \
            label:'@'"$txtfile" "${txtfile%.*}".bmp
          ;;
      esac
    done
    # Now bash them all together to make one image.
    convert -background "$bg" -gravity center ${tmpdir}/linetxt_*.bmp \
      label:'\n\n\n\n' -append "$label_img"
    # Finally, layer the label image on top of the original.
    composite "$label_img" -gravity south "$img_crop" "$img_txt"
  else
    mv "$img_crop" "$img_txt"
  fi

  # Now scale the result to the final size
  convert "$img_txt" -scale "$geom_final" -alpha off $flag_final "$dst_img"
}


# Do it.
for file in ${thisdir}/originals/*.gif; do
  process_one_file "$file"
done

# Zip up the bitmaps
(cd "$outdir" && zip -qr "${geom_crop}.zip" *)