コンピューター

写真や画像を一括でリサイズできる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. ウェブサービス

    パソコンとウェブサービスを使った情報の保管と、その功罪。

    猫も杓子もインターネットのこのご時世では、みなさんいろんな方法でネット…

  2. コンピューター

    歳をとってからの方が挑戦しやすいと思う理由。まだ間に合う、ちょっと未来の話。

    人間、結局のところ強みも弱みもないと思うんですよね。どんな弱みも強…

  3. コンピューター

    Amazonの7インチタブレットが今なら5,000円で買えちゃうよ!電子書籍の時代です。まだタブレッ…

    Amazonがまた面白いセールをやっているのでご紹介したいと思います。…

  4. コンピューター

    かざぐるマウスの後継ソフトはopenmausujiで決まり

    数日前、自宅のWindowsマシンで突如 --私のメインのブラ…

  5. Mac

    mac使いならホント絶対入れとけってソフト「Alfred」

    僕はこのソフトウェア -Alfred- をMacにインストールして以来…

  6. コンピューター

    最近の僕の仕事と、プログラミングというものについて

    最近は人の血糖値を光を使って測定する装置のソフトウェアを作っているんで…

コメント

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

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

  1. ニュース

    99円で4ヶ月!本と音楽が楽しみ放題 – Amazonが期間限定キャ…
  2. スポット

    【写真】武雄「白岩スケートパーク」に行ってきた
  3. 科学

    蓄音機の原理を調べてみた。デジタル世代の僕にはむしろレコードが謎でした。
  4. 世間話

    稼げないクリエイター業界をとりまく事情などについて考えてみた
  5. レビュー

    マクロ撮影にも良く、軽くて強い!ポータブル三脚 Rangers RA010を使っ…
PAGE TOP