コンピューター

写真や画像を一括でリサイズできる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. mvno格安SIM

    これヤバすぎ(笑)MVNO格安SIMに変更する前に”絶対に”確認しておくべきこと

    以前もMVNO、いわゆる格安SIMに変更するにあたっての記事をいろいろ…

  2. コンピューター

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

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

  3. コミック

    新しい世界の未来予想。まもなくバーチャル・リアリティの時代が来ます。

    先日、テレビでバーチャル・リアリティ(以下VR)についての特集を見まし…

  4. コンピューター

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

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

  5. コンピューター

    ディストピアを食い止める意思を。コンピューターの発展の先にある未来の話

    僕はコンピューターが大好きです。人類が誕生してかれこれ500万年か…

  6. ウェブサービス

    今ままでdisってごめん!このタブレットやっぱり即買だわ(笑)Amazon Kindle Fireが…

    そろそろかなあ〜(そわそわ)と家の中で過ごしていると、チャイムの福…

コメント

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

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

  1. お店紹介

    二年越しの長崎ランタンフェスティバル
  2. 健康

    毎朝起きるのが楽しみになる朝食メニュー。ビタミン豊富フルーツヨーグルト
  3. プロジェクト

    3/26(土)させぼ市民活動交流プラザで「無理のない」ことをしたい。
  4. 日記

    もくもく会を終えて
  5. 写真

    HTBよ永遠に。HTBpark last partyの写真
PAGE TOP