コンピューター

写真や画像を一括でリサイズできるrubyプログラミング

プログラミングを使って出来る事

プログラム、プログラミングという言葉を聞いた人は多いと思うのですが、具体的にどういう事をしているかという事を知っている人は意外に少ないんじゃないでしょうか。

テレビや映画の影響で、かっこ良くアニメーションする画面に向かって、ワインを飲みながらおしゃれダンディーな男がパスワードを解析する。みたいな事をイメージする人もいるかも知れませんね。

まあそういう世界も実際にあるのかも知れませんが、僕のプログラミングの世界はもっとシンプルというか地味です。

実際の画面

実際の画面

写真をそれぞれ適当なサイズに縮小するプログラムを書きました。

最近、写真の縮小リサイズをするケースが多くなってしまいました。

というのもこのブログでは横1024ピクセルの写真を、もうひとつの写真ブログでは横写真は横1440ピクセル、縦画像は横1280ピクセルの写真を用意しているからです。

いくら1コマンドで縮小作業が出来るとはいえ、写真の内容と名前を見比べながらそれぞれのサイズに変更するとなると結構しんどい事になってきました。

という事でこれらの作業を自動化したいと考えました。

以下が作成したプログラム全文です。

#!/usr/bin/ruby
class Picture
    @name
    @sizex
    @sizey
    @isOblong

    def initialize(name, sizex, sizey)
        @name = name
        @sizex = sizex
        @sizey = sizey
        checkAspect()
    end

    def checkAspect()
        if @sizex > @sizey then
            @isOblong = true
        else
            @isOblong = false
        end
    end

    def dumpStatus()
        puts @name
        puts @sizex
        puts @sizey
        puts @isOblong
    end

    def getName()
        return @name
    end

    def getIsOblong()
        return @isOblong
    end
end

class PictureMaker
    @pictures

    def initialize(srcarr)
        @pictures = []
        for src in srcarr
            pic = Picture.new(getName(src), getSizeX(src), getSizeY(src))
            @pictures.push(pic)
        end
    end

    def getPictures()
        return @pictures
    end

    def getName(src)
        result = src.match("(^.+)\\s")
        return result[1]
    end

    def getSizeX(src)
        result = src.match("\\s(\\d+)x")
        return result[1]
    end

    def getSizeY(src)
        result = src.match("x(\\d+)$")
        return result[1]
    end

end

pics = `ls *.jpg|xargs -I@ identify @|awk '{print $1, $3}'`
strarray = pics.split("\n")

pm = PictureMaker.new(strarray)

#mkdir
cmd = "mkdir 1024; mkdir 1280; mkdir 1440;"
#resize
for pic in pm.getPictures()
    if(pic.getIsOblong() == true) then
        cmd += "convert -resize 1440x -unsharp 0.125x1.0+1+0.05 -quality 80 -verbose " + pic.getName() + " ./1440/" + pic.getName() + ";"
    else
        cmd += "convert -resize 1280x -unsharp 0.125x1.0+1+0.05 -quality 80 -verbose " + pic.getName() + " ./1280/" + pic.getName() + ";"
    end
    cmd += "convert -resize 1024x -unsharp 0.125x1.0+1+0.05 -quality 80 -verbose " + pic.getName() + " ./1024/" + pic.getName() + ";"
end

exec(cmd)

カメラの傾きを記録しているExifデータがなかった

通常デジタルカメラから出力される写真データには、撮影した時のカメラの傾きの情報が記録されています。

これが使えれば今回みたいな長いプログラムを書く必要はなかったんですが、デジタルカメラの写真データを現像する際にどうやら失われてしまうらしく。

仕方がないので、画像の縦横の画素数で判断しようと思いました。

プログラムがやっている事をざっと解説

2行目から37行目までで、写真の名前と画像の縦横比を対で保管してPictureというデータを作っています。

39行目から74行目で、上記のPictureというデータを作るための前準備を行っています。

具体的にいうと、元々のプログラムから得られる画像の情報は

IMG_4717.jpg 5616x3744

というような形なので、名前とサイズをそれぞれ必要な部分のみ抜き取ってPictureデータに格納する準備をしているという事です。

名前:IMG_4717.jpg サイズX:5616 サイズY:3744

といった具合にですね。

76行目から最後までは、上記に作ったプログラムを目次的に実行する場面になります。

具体的には、1024 、1280 、1440というディレクトリ(フォルダ)を作って、縦画像は1280ピクセルに、横画像は1440ピクセルに、これらを含めた全ての画像を1024ピクセルに変換してそれぞれのディレクトリに格納しています。

これにて、完成です。

1時間半くらいかかりました

傾き情報のあるなしの確認に少々時間を費やして、書き上がるまでにだいたい1時間半くらいかかりました。

しかしこれまで、全ての画像を目でみて、それぞれ縮小して、正しいディレクトリに保存する。とやっていた作業がこれからは1コマンドで出来るようになりました。

おそらく、このプログラムを書くのに要した1時間半はすぐに回収する事ができると思います。

プログラム化する事の本当の威力

このプログラムがあれば、たとえ100個のディレクトリにそれぞれ1000枚の画像が縦横混合で入っていたとしても、ちょっとだけ手を加えて実行してやればパソコンが勝手にそれぞれのサイズに正しく間違いなく変換してくれます。

写真の数が1万になっても2万になっても同様です。たった1つのコマンドを実行して待つだけ。

これが決められた作業をコンピューターによってプログラム化してしまう事の一番大きな利点です。

加えて、パソコンで出来る作業って基本的には全てプログラム化する事が可能なんですね。

普段パソコンを使ってやる事が多い!特に繰り返しの作業がとっても多い!!

という人は是非今からでもプログラミングの技術を学ばれる事をおすすめしますよ!

本日もG線上のきりんを訪れてくださってありがとうございます。

それではまた。

 

この記事が気に入ったらいいね!しよう
🍀

更新情報をお届けします

金欠とバカと音楽と勇気前のページ

佐世保ぶらりチャリ旅次のページ

関連記事

  1. Linux

    僕がWindowsではなく、Linuxを使う3つの理由

    以前にも書きました通り、僕はパソコンが大好きです。…

  2. Linux

    bashからzshに変更しました。僕のたまごっち的な仕事道具

    GUI一般的なパソコンを使う人々はGUI(グラフィカルユーザーイン…

  3. コンピューター

    ブログシステムを更新しました

    ## WordPressサイトのメジャーアップデート作業記録旧…

  4. Linux

    もっと自由をくれ!僕がMacbookでLinuxを使う理由とその方法 その1

    普段からLinuxを使ってる自分ですが、今回初めてMacを購入しま…

  5. Mac

    Macbookのコントロールをコマンドキーにするけどターミナルではコントロールにした話

    MacBookPro、最近はだいぶ環境が整ってきて手になじんできました…

  6. コンピューター

    コンピューターのちょっと未来のこと、最近の技術

    最近、改めていろんなプログラミング言語を見て回っていますが、それぞれの…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

  1. レビュー

    池上彰さんの「おとなの教養」を読んだ
  2. こころ

    ほんとうに必要なものは、少ししかないから。ぼくはモノを捨てまくる。
  3. レビュー

    許すまじ宇宙ゴミ。アニメのプラネテスが面白すぎて紹介したい
  4. 日記

    仕事が大好きな職人だった、爺ちゃんの話
  5. 人間関係

    人に話す事は自分にいい聞かせる事だと思う
PAGE TOP