blob: 375bd2ccb0f6445f7e9950a9a7d42e85a070f922 [file] [log] [blame]
#!/bin/sh
# Copyright (c) 2012 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.
# Prepares image resources into output folder.
# Composition settings
BACKGROUND_COLOR=white
# The only file that uses different scaling parameter.
BACKGROUND_IMAGE=Background_white.bmp
die() {
echo "ERROR: $*" >&2
exit 1
}
convert_to_bmp3() {
local input="$1"
local folder="$2"
local param="$3"
local output="$(basename "$input")"
# Always output as .bmp
output="${output%.*}.bmp"
mkdir -p "$folder"
# When input has Alpha channel, we need to fill the background properly
# otherwise ImageMagick will fill it with black. The operation (-flatten) is
# so slow so we only want to do that if the input source really has
# transparency.
if [ "$#" -gt 3 ]; then
flatten="$4"
else
# Auto-detect
if [ "$(identify -format "%A" "$input")" = "True" ]; then
flatten="-background $BACKGROUND_COLOR -flatten"
else
flatten=""
fi
fi
echo "$input -> $folder/$output $flatten"
convert "$input" $flatten \
-compress none -alpha off -colors 256 \
$param "BMP3:$folder/$output"
# ImageMagic quantization may choose arbitrary color depth, even if we assign
# -depth or -colors; so a single-color background may become 1 bit per pixel
# after convertion. To workaround that, we use Python Image Library which
# always generates 8bpp BMP file.
# TODO(hungte) Find a better way to decide if PIL is required. Unfortunately,
# ImageMagic identify "%z" is not always what we're looking for...
local fn="$folder/$output"
python -c "import Image; Image.open('$fn').convert('P').save('$fn')"
}
main() {
local profile="$1"
local output="out_$1"
local scale_param="" background_scale_param=""
local base locale X
# Currently we use image resources originally designed for 1366x768, and
# re-scale to different aspects on demand.
case "$profile" in
x86 )
# The image size with x86 UEFI BIOS (also applies to coreboot) is always
# 800x600, which is stretched to fill the entire screen. With previous
# devices the physical screen size was either 1280x800 (16:10) or 1366x768
# (16:9). There's not a lot of difference between those, so let's just
# assume 16:9 for future platforms to make things simpler.
scale_param="-scale 59%x78%"
background_scale_param="-scale 800x600!"
;;
arm )
# On ARM platforms, we need to provide a bitmap with full size.
# TODO(hungte) Support more profiles, ex 1280x800.
true
;;
* )
die "Sorry, unknown profile $profile."
esac
# Prepare output folder
mkdir -p "$output"
# Prepare images in current folder
# TODO(hungte) Deprecate arrow*.bmp by markup ◀ and ▶, and
# Url.bmp by <span foreground="blue">http://</span>.
for X in $(ls *.bmp *.png assets/*.png); do
if [ "$X" = "$BACKGROUND_IMAGE" ]; then
convert_to_bmp3 "$X" "$output" "$background_scale_param"
else
convert_to_bmp3 "$X" "$output" "$scale_param"
fi
done
# Prepares strings and localized images. All these images were rendered by
# pango-view and should not have transparency, so we specify flatten="" to
# speed up.
echo "Preparing common strings..."
base="../strings"
for X in $base/*.png; do
convert_to_bmp3 "$X" "$output" "$scale_param" ""
done
echo "Preparing localized messages... $LOCALES"
base="../strings/localized_text"
if [ -z "$LOCALES" ]; then
# Collect all locales
for X in $(cd $base; ls); do
if [ -d "$base/$X" ]; then
LOCALES="${LOCALES}${X} "
fi
done
echo "Found locales: $LOCALES"
fi
for locale in $LOCALES; do
# Prepare all locales.
for X in $base/$locale/*.png; do
convert_to_bmp3 "$X" "$output/locale/$locale" "$scale_param" ""
done
done
# Prepare fonts
base="../strings/font"
for X in $base/*.png; do
convert_to_bmp3 "$X" "$output/font" "$scale_param" ""
done
bmpblk_font --outfile "$output/hwid_fonts.bin" "$output"/font/*.bmp
}
set -e
main "$@"