写真を処理するためのスクリプト:私たちの間のUnixの方法

こんばんは、ハブロビテス!

そもそも、私は難しい学校で簡単な実験助手として働いています。 私には多くの責任があり、その1つは学校のサイトとoshkole.ruリソースをコンテンツで更新することです。
多くの場合、このリソースに写真をアップロードする必要があります。 しかし、それは非常に曲がって書かれているため(ところで、学校のページを維持することは必須であり、検察の管理下にあります)、写真はフルサイズでエンドユーザーにアップロードされます。 したがって、1週間に30個以下のサイズ変更が必要です。

私はunix-wayが好きなので、bashスクリプトを書くというアイデアがすぐに思いつきました。

目標は、ディレクトリ内のすべての画像を簡単かつ自然にサイズ変更することでした。 タスクは非常に簡単で、スクリプトは5分でスケッチされました。そして、それは私に夜明けを告げました。 そして、ここに私は=)です

まだ退屈していない人、猫へようこそ。


それでは始めましょう。



サイズ変更自体は、ImageMagickセットの変換ユーティリティによって実行されます。 このユーティリティが非常に強力である(そしてImageMagick自体がさらに強力である)ことをすぐに予約し、その助けを借りて多くのことを行うことができます。
> convert image_in.jpg -resize 1228800@ image_out.jpg
ここでは、-resize 1228800 @オプションを使用します。 つまり、画像の面積は1228800ピクセル(1280x960の解像度に対応)になります。 写真は縦向きでも横向きでもよいため、ここでこのオプションを使用する方が合理的です。 画像のサイズ変更オプションの詳細については、 こちらをご覧ください

この段階で、自分自身だけでなくこれを行うという考えが生まれました=)。

そのため、最初にマシンに変換があるかどうかを確認する必要があります。 このようにしましょう:
convert > /dev/null
if [ $? -ne 0 ]; then echo "Error: convert is needed, it's a part of ImageMagick"; fi ;

エントリについて説明します「if [$? -ne 0] ":
ブラケット「[」はテストコマンドに対応し、man test(1)で読むことができます。 $で? 前のコマンドの結果が保存されます。 たとえば、実行が成功した場合は0になり、コマンドが見つからなかった場合は-127になります。閉じ括弧「]」は審美的な機能のみを実行します。

次。 小さな問題があります。たとえば、/ home / user /のように、ユーザーがアドレスの末尾に「/」を示している場合があります。 人間の方法でこのスラッシュを削除する方法は見つかりませんでしたので、子供用の三輪車を思い付きました:
if [ -z $1 ]; then $DIR=`pwd`;
else
TEMP=`pwd`;
cd $DIR; TEMP2=`pwd`;
cd $TEMP;
DIR=$TEMP2;
echo $TEMP2;
fi ;

同時に、引数が指定されていない場合は、現在のディレクトリを使用することにします。

古いファイルをコピーします...:
mkdir "$DIR.old";
for i in `ls $DIR`;
do
cp $DIR/$i $DIR.old;
done

「for i in ...」を本当に理解していない人のために、 ここをご覧になることをお勧めします。

まあ、最も重要なこと:
for i in `ls $DIR`;
do
convert $DIR/$i -resize 1228800@ $DIR/$i;
if [ $? -eq 0 ]; then
echo "$i successfully resized";
else k=$[$k+1]; #
fi ;
done

この段階ですべてが明確になるはずです。

だから、待望の瞬間:私たちはすべてを一緒に収集します。 ファイルはこちらからダウンロードできます
#!/bin/sh <br><br>
#, convert <br>
convert > /dev/null<br>
if [ $? -ne 0 ] ; then <br>
echo "Error: convert is needed, it's a part of ImageMagick" ;<br>
fi ;<br>
DIR=$1;<br>
# , "/" <br>
if [ -z $1 ]; then $DIR=`pwd`; <br>
else <br>
TEMP=`pwd`;<br>
cd $DIR; TEMP2=`pwd`; <br>
cd $TEMP;<br>
DIR=$TEMP2;<br>
echo $TEMP2;<br>
fi ; <br>
# DIR.old <br>
mkdir "$DIR.old" ;<br>
for i in `ls $DIR`; <br>
do <br>
cp $DIR/$i $DIR.old;<br>
done ;<br>
ERR=0;<br>
echo "Start resizing to 1280x960...." <br>
for i in `ls $DIR`;<br>
do <br>
convert $DIR/$i -resize 1228800@ $DIR/$i;<br>
if [ $? -eq 0 ]; then <br>
echo "$i successfully resized" ; <br>
else ERR=$[$ERR+1]; # <br>
fi ;<br>
done ;<br>
if [ $ERR -eq 0 ]; then <br>
echo "Job done!" ;<br>
else echo "Job done with some errors." ;<br>
fi ;<br>
echo "You can find your old files in $DIR.old" <br>
#end




スクリプトを実行する方法


「image」という名前のスクリプトが/ data / scriptsフォルダーにあり、処理される写真が/ data / fotoにあるとします。
次に、コマンドを実行します
> /data/scripts/image /data/foto
そしてほら!
スクリプトに実行権限を与えることを忘れないでください:
> chmod +x /data/scripts/image

結論


ご覧のとおり、すべてが非常に簡単でシンプルです。 UNIX-wayには何も問題はありません。 そこには何があり、たくさんの良いことがあります! 私は毎日このスクリプトを使用しています(現在)。さらに、ネットワークを操作するためのスクリプトをいくつか使用しています。 そして、私はあなたに良い女性のアドバイスを与えます:自動化! =)

私は初めて書いています、強く打たないでください

Source: https://habr.com/ru/post/J82394/


All Articles