18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ImageMagickを使う(Windows編)

Last updated at Posted at 2017-12-04

画像処理ライブラリ「ImageMagick」を使ってみる

参考:
ImageMagick (1) インストール編

目的

  • 大量にある画像を縦長、横長に分類したい(ImageMagick)

前提

  • ImagiMagick
    • すぐ消すかもしれないのでポータブル版を使う
    • すぐ消すかもしれないのでパスは通さない
    • Git Bashが導入済みなので、これでUnixコマンドを使う

導入

  1. ダウンロードページから「ImageMagick-7.0.7-8-portable-Q16-x64.zip」をダウンロード
  2. C:\library\ImageMagickに展開
  3. C:\TempでGit Bashを立ち上げる(右クリック→「Git Bash Here」)
  4. 下記コマンドを実行し、画像の幅と高さを取得して表示してみる

affine.png
↑ affine.png:304pixel x 85pixelの画像(ImageMagick付属の画像集より)

$ /c/library/ImageMagick/identify.exe -format "%w %h" /c/library/ImageMagick/images/affine.png
304 85

画像のサイズが取得できたので、導入成功

動作を確認しながら目的のシェルスクリプトを作成

$ cat definition
ROOT_PATH="/c/Temp/"
IDENTIFY="/c/library/ImageMagick/identify.exe"
TEMP_FOLDER="_temp"
HEIGHT="_hight-is-longer"
WIDTH="_width_is_longer"

$ cat testShell01.sh
#!/bin/bash

function isPicture(){
    # 拡張子で画像かどうか判定
    case ${FILE_EXTENSION} in
        "jpg" ) TOF="true";;
        "png" ) TOF="true";;
        * ) TOF="false";;
    esac
}

. ./definition

# _____picuturesの中のファイル一覧
ARRAY=$(ls ${ROOT_PATH}${TEMP_FOLDER}/)

if [ -n "${ARRAY}" ]; then
    # 一枚ずつサイズを取得して縦横の長さを比較
    for item in ${ARRAY[@]};do
        FILE_EXTENSION=$(echo ${item} | sed 's/^.*\.\([^\.]*\)$/\1/')
        isPicture
        # 対象のファイルが画像かどうかの判定
        if [ ${TOF} = "true" ] ; then
            echo ${item}
            tate=$(${IDENTIFY} -format "%h" ${ROOT_PATH}${TEMP_FOLDER}/"${item}")
            yoko=$(${IDENTIFY} -format "%w" ${ROOT_PATH}${TEMP_FOLDER}/"${item}")
            echo -ne "high:${tate} width:${yoko}\n"

            # 縦長なら_hight-is-longerディレクトリへ
            # 横長なら_width_is_longerディレクトリへファイルを移動させる
            if [ ${tate} -ge ${yoko} ]; then
                echo "Vertical picture"
                mv -vvv ${ROOT_PATH}${TEMP_FOLDER}/"${item}" ${ROOT_PATH}${HEIGHT}/
            else
                echo "Horizontal picture"
                mv -vvv ${ROOT_PATH}${TEMP_FOLDER}/"${item}" ${ROOT_PATH}${WIDTH}/
            fi
            echo -e "---\n"
        else
            echo "${item} is not picture"
        fi
    done
else
    echo "No pictures"
fi

課題

  • 自分が用意した作業対象の画像が空白を含んでいるせいで上手く動かなかった。
     → シェルスクリプト内でリネームしようとするも上手くいかず、やむなくそこだけバッチで処理

  • 上の理由から、この作業もバッチ化すれば良い感じなのだけれど、それも思ったようにいかず

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?