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

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

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}>" {} \;

個人的には、私は最新のバックアップからのみイメージを復元します。これは、画像を拡大または縮小すると品質が大幅に低下する可能性があるためです。

テストするときは、まず小さなイメージのコピーでスクリプトを実行してから、イメージ全体のコレクションからスクリプトを実行してください。また、バックアップが期待どおりに機能していることを確認してください。

おすすめ記事