jpg
すべての画像を変換するには、次のスクリプトを使用しますpng
。
# absolute path to image folder
FOLDER="/home/*/public_html/"
# max width
WIDTH=1280
# max height
HEIGHT=720
#resize png or jpg to either height or width, keeps proportions using imagemagick
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;
ところで、今日走ってびっくりしました。
ls -l
大きくても小さくても写真はすべて修正され、データも変更されたことが明らかになった。
Oct 28 11:18 /home/photos/20210321/T161631305496ece25372fc18a9239da7911ac7c0dd056 (2).jpg
if
そのため、まず画像パスを確認してから、WIDTHが1280pxより大きい場合に実行される条件を使用するつもりですconvert
。そうでなければ何もしないでください。
アップデート2
このスクリプトを作成しました。
#!/bin/bash
for i in /root/d/*.jpg; do
read -r w h <<< $(identify -format "%w %h" "$i")
if [ $w -gt 1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;
fi
done
だから私はそれをfind
より明確に見るfor
。
for
すべてのフォルダとサブフォルダは検索されません。
アップデート3
WIDTH=1280
HEIGHT=720
find /home/sen/tes/ -type f \( -iname \*.jpg -o -iname \*.png \) | while read img; do \
anytopnm "$img" | pamfile | \
perl -ane 'exit 1 if $F[3]>1280' || convert "$img" -verbose -resize "${WIDTH}x${HEIGHT}>" "$img"; \
done
うまくいきますが、理解しています。
jpegtopnm: WRITING PPM FILE
画像がないとき> 1280
答え1
コマンドの主な問題convert
は、パラメータが$WIDTHx$HEIGHT\>
名前付き変数に拡張しようとしていることです$WIDTHx
。この変数が存在しないため、使用されるパラメータ-resize
は任意のパラメータです$HEIGHT\>
(使用と同じ"${HEIGHT}x$HEIGHT>"
)。を使用してこの問題を解決できます-resize "${WIDTH}x$HEIGHT>"
。これは両方のコマンドの問題ですfind
。
大きすぎる画像を縮小するには、次のようなものを使用できます。
#!/bin/sh
w=1280
h=720
find /home/*/public_html -type f \( -iname '*.jpg' -o -name '*.png' \) \
-exec convert -resize "${w}x${h}>" {} \;
個人的には、私は最新のバックアップからのみイメージを復元します。これは、画像を拡大または縮小すると品質が大幅に低下する可能性があるためです。
テストするときは、まず小さなイメージのコピーでスクリプトを実行してから、イメージ全体のコレクションからスクリプトを実行してください。また、バックアップが期待どおりに機能していることを確認してください。
答え2
申し訳ありません。明確ではありませんでした。最後のスクリプトを見つけて書いて、Qのタイトルを賢く修正したいと思います。
スクリプトはファイルを検索するjpg
か、png
見つかった場合は幅が1280より大きいことを確認して変換します。
#!/bin/bash
find /home/sen/tes/ -type f \( -iname \*.jpg -o -iname \*.png \) | while read i; do \
read -r w h <<<$(identify -format "%w %h" "$i")
if [ $w ]; then
if [ $w -gt 1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize ${WIDTH}x${HEIGHT}\> \{} \;
fi
fi
done