20181224

計算力学技術者試験の問題集 自炊(裁断→スキャン)→リネーム、クロップ等の記録

やっと、計算力学技術者試験が終わった。12/15。固体、振動、流体とあるが、今年は振動を受けた。来年は固体。
来年に向けて、固体用のファイルを作った。
固体のファイルを作った時に、画像ファイルをリネームしたりクロップした。
携帯で読みやすくなった。

今年は、受験資格のソフトウェア使用経験を満たすため、通信講座に時間をかけた。そのため、試験勉強がおろそかになった。受かったかどうか自信はない。

裁断する

問題集は薄い。だから裁断機でも切れる。
裁断は、本文が切れたりしなければ何でもいい。
分厚い本ならば、かんなで背表紙を削ってもいい。かんながあればの話。

かんなは、案外安い。右の裁断機、2011年頃買ったら10000位したような気がした。気のせいかもしれないが。一回で数十枚しか切れないので、重労働になる。

後の加工を考えると、この時点で、余白を切り取ってしまった方がよかったのかもしれない。

スキャンする

スキャナーは、適当。
読み取り速度とかあるのかもしれないけど、よくわからない。

一枚一枚、手で紙を入れ替えるやつは、やめたほうがいい。
紙が自動的に、吸い込まれてくやつがいい。
精度は、ファイルサイズと読みやすさから検討。

三種類ある。

  1. パタパタするやつ。
  2. 吸い込むやつ
  3. 本のまま、めくって写真をとるやつ。
  4. 手で走査するやつ。
1234の順に並べた。2が高いけどおすすめ。ただ、紙の粉が詰まる。1は苦行。3は試してない。紙の粉の心配が無くてよさそうだが。
4は失敗するのが目に見えてる。昔家にあったfaxのスキャナが、4のタイプだった。手で動かすから、手があらぬ方向に動いたら全体的にゆがむ。読み取りスピード以上の速さで手を動かしたら、当然文字が飛ぶ。1のタイプでは、原稿を動かさないかぎり、そういうことが起こらない。

画像をクロップする

数百問を手作業でクロップする。
問〇-〇ってところを認識してクロップとかできればいいけど、そんなテクニックは知らない。できない。
裁断するときに、余白を切り取ってしまった方がよかったのかもしれない。

↓ サンプルとして、作ったものを載せる。文章に意味はない。

ワードで作ったような問題集だったので、ワードで作ってみた。かなり再現性高いと思う。

0001.png0002.png

ファイル名は、問題→回答順

紙の本の、問題集は、問題パートと、回答パートが分かれてしまっていた為、いちいちめくるのが大変だった。
問題→回答→問題→回答…この順番に並べ替える。
問題を奇数、回答を偶数で保存すると便利。

問題集は、順番通りのファイル名にしなければ、読みづらい。

リネームするマクロ

リネームするマクロを作った。
下のマクロは、偶数奇数を考えていない。少し書き直さないと、偶奇で保存できない。

os.rename(j, dirnm + r”/“ + “%05.f”%i + “%s”%(j)[-4:])

のiの部分を、2iとか、2i+1にすれば、何とかなるかも。よくあるやり方。

使用すると、フォルダ内の全てのファイル名が連番に変更されてしまう、恐ろしいマクロです。元に戻す方法は無い。

  1. 実行すると、フォルダ選択ダイアログが表示
  2. 選んだフォルダ内のすべてのファイルが、ファイル名順にソートされてから、5桁の0埋めの連番でリネームされる。
# coding: utf-8

import Tkinter
import tkFileDialog
import glob
import os


dirnm = tkFileDialog.askdirectory(title="Caution! carefully use.")

fnames = glob.glob(dirnm + r"/" + "*")
fnames = sorted(fnames)
lfname = len(fnames)

for i,j in enumerate(fnames):
print("%05.f"%i + "%s"%(j)[-4:])
os.rename(j, dirnm + r"/" + "%05.f"%i + "%s"%(j)[-4:])

縦長のページが、読みづらい

出来上がった画像ファイルは、スマホを横にして読みたい。
だから、画像ファイルは、横長がいい。横長にして、できるだけ大きい文字を見たい。
縦横比は、スマホにぴったりの16:9がいい。
なのに問題によっては、縦に長い画像になってしまう。
特に回答。

そんな時のために、画像をクロップするpythonのマクロを作った。

使用すると、フォルダ内の全てのjpgファイルが16:9に変更→分割されてしまう、恐ろしいマクロです。 かといって元のファイルを消すわけでもないので、そこまで怖くないかも。

# coding:utf-8

from PIL
import Image
import os, glob
import tkFileDialog


fld = tkFileDialog.askdirectory()
list = glob.glob(fld + "/" + ur"*.png") + glob.glob(fld + "/" + ur"*.jpg")

print list

for i in list:
im = Image.open('%s'%(i))
im_width, im_height = im.size

im_new_height = im_width / 16 * 9#縦のピクセル数 pixcel数の指定がしたいので、intの方が都合がいい。
last_height = im_height - im_new_height

if im_new_height*1.2 < im_height:#想定よりも1.2倍縦長ならば...
div_num = im_height / im_new_height
sft = (im_height - last_height) / div_num

if sft<im_new_height*1.7:
div_num += 1
else:
div_num += 2

shift = last_height / (div_num-1)

for i2 in range(div_num):
xl, yu, xr, yl = 0, i2*shift, im_width, im_new_height+i2*shift
im_crop = im.crop((xl, yu, xr, yl))
print i
print i2
im_crop.save('%s_%02.f%s'%(i[:-4], i2, i[-4:]))
print('%s_%02.f%s'%(i[:-4], i2, i[-4:]))
#print("%s, %s, %s, %s"%(xl, yu, xr, yl))
im_crop.close()

else:
print('%s'%(i))

im.close()
上の二つのファイルを保存したフォルダに対して実行すると、
  • 問の画像(すでに横長)に関しては、何も出てこない。
  • 解答の画像(縦長)は、分割されたファイルが出てくる。元の画像はそのまま。
  • ファイル名は00001_00, 00001_01, 00001_02, 00001_03, となっているはず。

こんな感じ。



0002_00.png 0002_01.png




0002_02.png 0002_03.png




一日20ファイル(10問)を目安に、やっていこうと思っている。

posted by yuchan at 07:00 | Comment(0) | python