テキスト(xpm)ファイルの行をどのようにコピーしますか?

テキスト(xpm)ファイルの行をどのようにコピーしますか?

私はいくつかのフィックスマップを持っています(正確には36個)。

/* XPM */
static char * hide_active_xpm[] = {
"12 14 3 1",
"   c None",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"            ",
"            ",
"            ",
"            ",
" ....++.... ",
" ....++.... ",
" .......... ",
" .......... ",
" ++++++++++ ",
" ++++++++++ ",
" .......... ",
" .......... ",
" ....++.... ",
" ....++.... "};

4倍(横2倍、縦2倍)もっと大きくしたいです。 Gtk 色を選択するために色が定義されていて、あまりにも多くの画像を編集するのに時間がかかりすぎるため、画像エディタは使用できません。それで私はコマンド/スクリプトを書くことができますか?すべてのピクセルを複製そしてすべてのピクセルラインを複製します。(7行目から)ファイルはいくつありますか?つまり、コマンド/スクリプトでこれを変更できます。

/* XPM */
static char * hide_active_xpm[] = {
"4 3 2 1",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"+...",
".++.",
"+.+."};

これに関して:

/* XPM */
static char * hide_active_xpm[] = {
"8 6 2 1",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"++......",
"++......",
"..++++..",
"..++++..",
"++..++..",
"++..++.."};

私の質問を確認していただきありがとうございます。

メシニックス

答え1

次のスクリプトは.xpmファイルを入力として使用し、目的の新しい出力を印刷します。

#!/bin/bash
#enlarge.sh

cat "$1" | while read -r line; 
do 
    if echo "$line" | grep -vP "[[:alnum:]]" 1>/dev/null; 
    then 
        #The following line is applies to all pixel lines except the very last one 
        echo "$line" | sed 's/\(\+\|\.\)/&&/g;p' | grep -vP "\}\;$" || \

            #The following line applies to the last one with "};" characters in the end 
            echo "$line" | sed 's/\(\+\|\.\)/&&/g' | sed 's/\}\;$/,/g' | sed 'p;s/\,$/\}\;/g'
    else
        echo "$line"
    fi; 
done; 

希望する新しい出力が画面に印刷されます。出力をファイルとして印刷するには、次のようにします。

./enlarge.sh input.xpm > new.xpm

重要なヒント

スクリプトはsed正規表現に基づいています。テキストが複数行にわたって分散している状況では、これは非常に信頼できません。画像サイズを倍増したい場合はそれを使用しませんかmogrify?使用法は次のとおりです。

 mogrify -scale 200% image.xpm

関連情報