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

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

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

関連情報