変換する前に画像の幅を確認してください

変換する前に画像の幅を確認してください

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

関連情報