Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1059)

Unified Diff: tools/resources/optimize-png-files.sh

Issue 291153007: Update optimize_png_files.sh to work on msysgit bash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/resources/optimize-png-files.sh
diff --git a/tools/resources/optimize-png-files.sh b/tools/resources/optimize-png-files.sh
index e5e404324be9185364d5555c5e73484d211e2915..de575fe16644c39339d06eaa133015d36e841438 100755
--- a/tools/resources/optimize-png-files.sh
+++ b/tools/resources/optimize-png-files.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -i
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -54,11 +54,11 @@ PROCESSED_FILE=0
declare -a THROBBER_STR=('-' '\\' '|' '/')
THROBBER_COUNT=0
-VERBOSE=0
+VERBOSE=false
# Echo only if verbose option is set.
function info {
- if [ $VERBOSE -eq 1 ]; then
+ if $VERBOSE ; then
echo $@
fi
}
@@ -66,7 +66,8 @@ function info {
# Show throbber character at current cursor position.
function throbber {
info -ne "${THROBBER_STR[$THROBBER_COUNT]}\b"
- let THROBBER_COUNT=($THROBBER_COUNT+1)%4
+ let THROBBER_COUNT=$THROBBER_COUNT+1
+ let THROBBER_COUNT=$THROBBER_COUNT%4
}
# Usage: pngout_loop <file> <png_out_options> ...
@@ -77,13 +78,13 @@ function pngout_loop {
shift
local opts=$*
if [ $OPTIMIZE_LEVEL == 1 ]; then
- for j in $(seq 0 5); do
+ for j in $(eval echo {0..5}); do
throbber
pngout -q -k1 -s1 -f$j $opts $file
done
else
for i in 0 128 256 512; do
- for j in $(seq 0 5); do
+ for j in $(eval echo {0..5}); do
throbber
pngout -q -k1 -s1 -b$i -f$j $opts $file
done
@@ -106,7 +107,6 @@ function get_color_depth_list {
#
# TODO(oshima): Experiment with -d0 w/o -c0.
function process_grayscale {
- info -n "|gray"
for opt in $(get_color_depth_list); do
pngout_loop $file -c0 $opt
done
@@ -115,7 +115,6 @@ function process_grayscale {
# Usage: process_grayscale_alpha <file>
# Optimize grayscale images with alpha for all color bit depths.
function process_grayscale_alpha {
- info -n "|gray-a"
pngout_loop $file -c4
for opt in $(get_color_depth_list); do
pngout_loop $file -c3 $opt
@@ -125,7 +124,6 @@ function process_grayscale_alpha {
# Usage: process_rgb <file>
# Optimize rgb images with or without alpha for all color bit depths.
function process_rgb {
- info -n "|rgb"
for opt in $(get_color_depth_list); do
pngout_loop $file -c3 $opt
done
@@ -137,7 +135,6 @@ function process_rgb {
# Optimize the huffman blocks.
function huffman_blocks {
local file=$1
- info -n "|huffman"
local size=$(stat -c%s $file)
local min_block_size=$DEFAULT_MIN_BLOCK_SIZE
local limit_blocks=$DEFAULT_LIMIT_BLOCKS
@@ -151,7 +148,7 @@ function huffman_blocks {
max_blocks=$limit_blocks
fi
- for i in $(seq 2 $max_blocks); do
+ for i in $(eval echo {2..$max_blocks}); do
throbber
pngout -q -k1 -ks -s1 -n$i $file
done
@@ -163,7 +160,6 @@ function huffman_blocks {
# TODO(oshima): Try adjusting different parameters for large files to
# reduce runtime.
function random_huffman_table_trial {
- info -n "|random"
oshima 2014/05/22 18:51:43 why removing them?
Peter Kasting 2014/05/22 18:57:31 They usually extend the printed text for each file
oshima 2014/05/22 20:38:05 I added -v for development purpose to see each ste
local file=$1
local old_size=$(stat -c%s $file)
local trials_count=$DEFAULT_RANDOM_TRIALS
@@ -171,7 +167,7 @@ function random_huffman_table_trial {
if [ $old_size -gt $LARGE_FILE_THRESHOLD ]; then
trials_count=$LARGE_RANDOM_TRIALS
fi
- for i in $(seq 1 $trials_count); do
+ for i in $(eval echo {1..$trials_count}); do
throbber
pngout -q -k1 -ks -s0 -r $file
done
@@ -185,7 +181,6 @@ function random_huffman_table_trial {
# Further compress using optipng and advdef.
# TODO(oshima): Experiment with 256.
function final_compression {
- info -n "|final"
local file=$1
if [ $OPTIMIZE_LEVEL == 2 ]; then
for i in 32k 16k 8k 4k 2k 1k 512; do
@@ -193,21 +188,25 @@ function final_compression {
optipng -q -nb -nc -zw$i -zc1-9 -zm1-9 -zs0-3 -f0-5 $file
done
fi
- for i in $(seq 1 4); do
+ for i in $(eval echo {1..4}); do
throbber
advdef -q -z -$i $file
done
- info -ne "\r"
+
+ # Clear the current line.
+ if $VERBOSE ; then
+ printf "\033[0G\033[K"
+ fi
}
# Usage: get_color_type <file>
# Returns the color type name of the png file. Here is the list of names
# for each color type codes.
-# 0 : grayscale
-# 2 : RGB
-# 3 : colormap
-# 4 : gray+alpha
-# 6 : RGBA
+# 0: grayscale
+# 2: RGB
+# 3: colormap
+# 4: gray+alpha
+# 6: RGBA
# See http://en.wikipedia.org/wiki/Portable_Network_Graphics#Color_depth
# for details about the color type code.
function get_color_type {
@@ -218,9 +217,17 @@ function get_color_type {
# Usage: optimize_size <file>
# Performs png file optimization.
function optimize_size {
- tput el
+ # Print filename, trimmed to ensure it + throbber don't take more than 1 line
+ local filename_length=${#file}
+ local -i allowed_length=$COLUMNS-1
+ local -i trimmed_length=$filename_length-$COLUMNS-4
+ if [ "$filename_length" -lt "$allowed_length" ]; then
+ info -n "$file"
+ else
+ info -n "...${file:$trimmed_length}"
+ fi
+
local file=$1
- info -n "$file "
advdef -q -z -4 $file
@@ -239,7 +246,6 @@ function optimize_size {
fi
fi
- info -n "|filter"
local old_color_type=$(get_color_type $file)
optipng -q -zc9 -zm8 -zs0-3 -f0-5 $file -out $file.tmp.png
local new_color_type=$(get_color_type $file.tmp.png)
@@ -248,7 +254,7 @@ function optimize_size {
# the bug is fixed. See crbug.com/174505, crbug.com/174084.
# The issue is reported in
# https://sourceforge.net/tracker/?func=detail&aid=3603630&group_id=151404&atid=780913
- if [[ $old_color_type == "RGBA" && $new_color_type =~ gray.* ]] ; then
+ if [[ $old_color_type == "RGBA" && $new_color_type == gray* ]] ; then
rm $file.tmp.png
info -n "[skip opting]"
else
@@ -259,7 +265,6 @@ function optimize_size {
huffman_blocks $file
# TODO(oshima): Experiment with strategy 1.
- info -n "|strategy"
if [ $OPTIMIZE_LEVEL == 2 ]; then
for i in 3 2 0; do
pngout -q -k1 -ks -s$i $file
@@ -280,7 +285,7 @@ function process_file {
local file=$1
local name=$(basename $file)
# -rem alla removes all ancillary chunks except for tRNS
- pngcrush -d $TMP_DIR -brute -reduce -rem alla $file > /dev/null
+ pngcrush -d $TMP_DIR -brute -reduce -rem alla $file > /dev/null 2>&1
if [ -f $TMP_DIR/$name -a $OPTIMIZE_LEVEL != 0 ]; then
optimize_size $TMP_DIR/$name
@@ -301,26 +306,28 @@ function optimize_file {
process_file $file
- if [ ! -e $tmp_file ] ; then
+ if [ ! -e $tmp_file ] ; then
let CORRUPTED_FILE+=1
- echo "The png file ($file) may be corrupted. skipping"
+ echo "$file may be corrupted; skipping\n"
return
fi
local new=$(stat -c%s $tmp_file)
let diff=$old-$new
- let percent=($diff*100)/$old
+ let percent=$diff*100
+ let percent=$percent/$old
- tput el
if [ $new -lt $old ]; then
- echo -ne "$file : $old => $new ($diff bytes : $percent %)\n"
- mv "$tmp_file" "$file"
+ echo -ne "$file: $old => $new ($diff bytes: $percent%)\n"
+ cp "$tmp_file" "$file"
let TOTAL_OLD_BYTES+=$old
let TOTAL_NEW_BYTES+=$new
let PROCESSED_FILE+=1
else
if [ $OPTIMIZE_LEVEL == 0 ]; then
- info -ne "$file : skipped\r"
+ info -ne "$file: Skipped\n"
+ else
+ echo -ne "$file: Unable to reduce size\n"
oshima 2014/05/22 18:51:43 info
Peter Kasting 2014/05/22 18:57:31 I used echo on purpose, to match the use of echo i
fi
rm $tmp_file
fi
@@ -400,6 +407,19 @@ else
using_cygwin=false
fi
+# The -i in the shebang line should result in $COLUMNS being set on newer
+# versions of bash. If it's not set yet, attempt to set it.
+if [ -z $COLUMNS ]; then
+ which tput > /dev/null 2>&1
+ if [ "$?" == "0" ]; then
+ COLUMNS=$(tput cols)
+ else
+ # No tput either... give up and just guess 80 columns.
+ COLUMNS=80
+ fi
+ export COLUMNS
+fi
+
OPTIMIZE_LEVEL=1
# Parse options
while getopts o:r:h:v opts
@@ -413,13 +433,13 @@ do
fi
;;
o)
- if [[ ! "$OPTARG" =~ [012] ]] ; then
+ if [[ "$OPTARG" != 0 && "$OPTARG" != 1 && "$OPTARG" != 2 ]] ; then
show_help
fi
OPTIMIZE_LEVEL=$OPTARG
;;
v)
- let VERBOSE=1
+ VERBOSE=true
;;
[h?])
show_help;;
@@ -455,7 +475,7 @@ if $using_cygwin ; then
fi
# Make sure we cleanup temp dir
-trap "rm -rf $TMP_DIR" EXIT
+#trap "rm -rf $TMP_DIR" EXIT
# If no directories are specified, optimize all directories.
DIRS=$@
@@ -489,17 +509,13 @@ else
fi
# Print the results.
-if [ $PROCESSED_FILE == 0 ]; then
- echo "Did not find any files (out of $TOTAL_FILE files)" \
- "that could be optimized" \
- "in $(date -u -d @$SECONDS +%T)s"
-else
+echo "Optimized $PROCESSED_FILE/$TOTAL_FILE files in" \
+ "$(date -d "0 + $SECONDS sec" +%Ts)"
+if [ $PROCESSED_FILE != 0 ]; then
let diff=$TOTAL_OLD_BYTES-$TOTAL_NEW_BYTES
let percent=$diff*100/$TOTAL_OLD_BYTES
- echo "Processed $PROCESSED_FILE files (out of $TOTAL_FILE files)" \
- "in $(date -u -d @$SECONDS +%T)s"
- echo "Result : $TOTAL_OLD_BYTES => $TOTAL_NEW_BYTES bytes" \
- "($diff bytes : $percent %)"
+ echo "Result: $TOTAL_OLD_BYTES => $TOTAL_NEW_BYTES bytes" \
+ "($diff bytes: $percent%)"
fi
if [ $CORRUPTED_FILE != 0 ]; then
echo "Warning: corrupted files found: $CORRUPTED_FILE"
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698