| #!/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 "$@" |
| |