5

指定されたフォルダ内のすべての画像を取得するbashスクリプトが必要です。それらの解像度を取得し、それが最小値を下回っている場合は何もしません。それ以外の場合は、中程度の親指の画像(200x150ピクセル)を作成します。

WindowsでImagemagickを使用しています。しかし、Linuxでは同じスクリプトを使用できないため、新しいスクリプトを作成する必要があります。

これは私がこれまでに思いついたものです。

#!/bin/bash
for files in /path/to/image/*
  do
       TESTFILE=`echo "$files" | sed 's/|/ /g' | xargs file -b | awk '{print $1}'`
       while read F
       CHECKSIZE=`file "$TESTFILE" -b | sed 's/ //g' | sed 's/,/ /g' | awk  '{print $2}' | sed 's/x/ /g' | awk '{print $1}'`
     if [ $CHECKSIZE -ge  200  ]; then
        convert -sample 200x150 "$F" "$F{_thumb}"
     fi
    done
  done

しかし、このスクリプトを実行しても、サムネイルが表示されたり、エラーが発生したりすることはありません。私はこれらのスクリプトにかなり慣れていません。

アップデート :

私はこのスクリプトを思いついた、みんなに感謝します。しかし今、私はもう1つの助けが必要です。ここで、新しい画像を画像フォルダ内のフォルダに保存したいと思います。たとえば、/ home/imageはすべてのファイルがある場所です。親指の画像を/home/ image/thumbsに保存したい。また、ファイルの名前をfilename_thumb.jpgに変更したいのですが、次のスクリプトの問題は、filename.jpg_thumbとして保存されていることです。

#!/bin/bash
THUMBS_FOLDER=/home/temp/thumbs
for file in /home/temp/*
do
  # next line checks the mime-type of the file
  IMAGE_TYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
  if [ x$IMAGE_TYPE = "ximage" ]; then
      IMAGE_SIZE=`file -b $file | sed 's/ //g' | sed 's/,/ /g' | awk  '{print $2}'`
      WIDTH=`identify -format "%w" "$file"`
      HEIGHT=`identify -format "%h" "$file"`           
      # If the image width is greater that 200 or the height is greater that 150 a thumb is created
     if [ $WIDTH -ge  201 ] || [ $HEIGHT -ge 151 ]; then
        #This line convert the image in a 200 x 150 thumb 
        filename=$(basename "$file")
        extension="${filename##*.}"
        filename="${filename%.*}"
        convert -sample 200x150 "$file" "${THUMBS_FOLDER}/${filename}_thumb.${extension}"   
     fi
  fi     
done
4

3 に答える 3

3

imageinfo を使用しない別のアプローチ:

画像パスを変更することを忘れないでください。私の場合、同じフォルダー レベルで imgs というフォルダーを使用します。

create_thumbs.sh というファイルの内容をコピーし、次のコードを貼り付けます。

#!/bin/bash
THUMBS_FOLDER=/home/image/thumb
for file in /home/image/*
do
  # next line checks the mime-type of the file
  IMAGE_TYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
  if [ x$IMAGE_TYPE = "ximage" ]; then
      IMAGE_SIZE=`file -b $file | sed 's/ //g' | sed 's/,/ /g' | awk  '{print $2}'`
      WIDTH=`echo $IMAGE_SIZE | sed 's/x/ /g' | awk '{print $1}'`
      HEIGHT=`echo $IMAGE_SIZE | sed 's/x/ /g' | awk '{print $2}'`           
      # If the image width is greater that 200 or the height is greater that 150 a thumb is created
     if [ $WIDTH -ge  201 ] || [ $HEIGHT -ge 151 ]; then
        #This line convert the image in a 200 x 150 thumb 
        filename=$(basename "$file")
        extension="${filename##*.}"
        filename="${filename%.*}"
        convert -sample 200x150 "$file" "${THUMBS_FOLDER}/${filename}_thumb.${extension}"   
     fi
  fi     
done

それを呼び出すには:

bash create_thumbs.sh
于 2012-10-18T06:11:17.070 に答える
0

このコードは理解しやすいかもしれません:

#!/bin/bash
for file in /path/to/images/*
do
  # next line checks the mime-type of the file
  CHECKTYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
  if [ "x$CHECKTYPE" == "ximage" ]; then
    CHECKSIZE=`stat -f "%z" "$file"`               # this returns the filesize
    CHECKWIDTH=`identify -format "%W" "$file"`     # this returns the image width

    # next 'if' is true if either filesize >= 200000 bytes  OR  if image width >=201
    if [ $CHECKSIZE -ge  200000 ] || [ $CHECKWIDTH -ge 201 ]; then
       convert -sample 200x150 "$file" "$(dirname "$file")/thumb_$(basename "$file")"
    fi
  fi
done
于 2012-10-16T18:40:56.967 に答える
0

わずかな変更を加えたスクリプトと imageinfo のインストールは、期待どおりに機能します。以下のソリューションを参照してください。

imageinfo ツールをインストールします (私の場合はインストール済みです。既にインストールされているかどうかを確認してください)。

sudo apt-get install imageinfo

そしてスクリプト:

#!/bin/bash
for file in ./image/*
do
  # next line checks the mime-type of the file
  IMAGE_TYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
  if [ "x$IMAGE_TYPE" == "ximage" ]; then

    WIDTH=`imageinfo --width "$file"`      # obtaining the image width
    HEIGHT=`imageinfo --height "$file"`    # obtaining the image height

    # If the image width is greater that 200 or the height is greater that 150 a thumb is created
    if [ $WIDTH -ge  201 ] || [ $HEIGHT -ge 151 ]; then
       #This line convert the image in a 200 x 150 thumb 
       convert -sample 200x150 "$file" "$(dirname "$file")/thumb_$(basename "$file")" 
    fi
  fi
done
于 2012-10-17T18:44:51.400 に答える