Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ImageMagickを使う(Windows編)

More than 1 year has passed since last update.

画像処理ライブラリ「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

課題

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

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

iwase10moya
成果があったらお知らせするところ。
techfun
Tech FunはITの力で世界を豊かにする総合サービス企業です。 IT研修スクール「TechFun.jp(https://techfun.jp/)」、eラーニングプラットフォーム「StudySmile(https://studysmile.com/)」のほか、ミャンマーオフショア開発、スマートフォンアプリ開発、Webシステム開発、SIサービスを展開しています。
https://www.techfun.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away