75 lines
2.1 KiB
Bash
75 lines
2.1 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
# The file from which to extract *.ico files or a particular *.ico file.
|
||
|
# (e.g.: './KeePass.exe', './myLibrary.dll', './my/path/to/app.ico').
|
||
|
# As you notived, the utility can extract icons from a windows executable or
|
||
|
# dll.
|
||
|
rscFile=$1
|
||
|
|
||
|
# A regexp that can extract the image size from the file name. Because we
|
||
|
# use 'icotool', this value should usually be set to something like
|
||
|
# '[^\.]+\.exe_[0-9]+_[0-9]+_[0-9]+_[0-9]+_([0-9]+x[0-9]+)x[0-9]+\.png'.
|
||
|
# A reg expression may be written at some point that relegate this to
|
||
|
# an implementation detail.
|
||
|
sizeRegex=$2
|
||
|
|
||
|
# A regexp replace expression that will be used with 'sizeRegex' to create
|
||
|
# a proper size directory (e.g.: '48x48'). Usually this is left to '\1'.
|
||
|
sizeReplaceExp=$3
|
||
|
|
||
|
# A regexp that can extract the name of the target image from the file name
|
||
|
# of the image (usually png) extracted from the *.ico file(s). A good
|
||
|
# default is '([^\.]+).+' which gets the basename without extension.
|
||
|
nameRegex=$4
|
||
|
|
||
|
# A regexp replace expression that will be used alongside 'nameRegex' to create
|
||
|
# a icon file name. Note that you usually put directly you icon name here
|
||
|
# without any extension (e.g.: 'my-app'). But in case you've got something
|
||
|
# fancy, it will usually be '\1'.
|
||
|
nameReplaceExp=$5
|
||
|
|
||
|
# The
|
||
|
# out=./myOut
|
||
|
out=$6
|
||
|
|
||
|
# An optional temp dir.
|
||
|
if [ "" != "$7" ]; then
|
||
|
tmp=$7
|
||
|
isOwnerOfTmpDir=false
|
||
|
else
|
||
|
tmp=`mktemp -d`
|
||
|
isOwnerOfTmpDir=true
|
||
|
fi
|
||
|
|
||
|
rm -rf $tmp/png $tmp/ico
|
||
|
mkdir -p $tmp/png $tmp/ico
|
||
|
|
||
|
# Extract the ressource file's extension.
|
||
|
rscFileExt=`echo "$rscFile" | sed -re 's/.+\.(.+)$/\1/'`
|
||
|
|
||
|
if [ "ico" = "$rscFileExt" ]; then
|
||
|
cp -p $rscFile $tmp/ico
|
||
|
else
|
||
|
wrestool -x --output=$tmp/ico -t14 $rscFile
|
||
|
fi
|
||
|
|
||
|
icotool --icon -x --palette-size=0 -o $tmp/png $tmp/ico/*.ico
|
||
|
|
||
|
mkdir -p $out
|
||
|
|
||
|
for i in $tmp/png/*.png; do
|
||
|
fn=`basename "$i"`
|
||
|
size=$(echo $fn | sed -re 's/'${sizeRegex}'/'${sizeReplaceExp}'/')
|
||
|
name=$(echo $fn | sed -re 's/'${nameRegex}'/'${nameReplaceExp}'/')
|
||
|
targetDir=$out/share/icons/hicolor/$size/apps
|
||
|
targetFile=$targetDir/$name.png
|
||
|
mkdir -p $targetDir
|
||
|
mv $i $targetFile
|
||
|
done
|
||
|
|
||
|
rm -rf "$tmp/png" "$tmp/ico"
|
||
|
|
||
|
if $isOwnerOfTmpDir; then
|
||
|
rm -rf "$tmp"
|
||
|
fi
|