バッチ処理のやりかたは公式さんのヘルプサイトを参照。
バッチ処理をしてみよう(Photoshop Elements 15/2018)
めも内容
画面解像度
- 画面横幅: 1024 pixel
- 縦横比を固定
クイック補正
- 自動レベル補正
- シャープ
バッチ処理のやりかたは公式さんのヘルプサイトを参照。
バッチ処理をしてみよう(Photoshop Elements 15/2018)
コピーライト情報を追加する先は、正確には EXIF 情報ではなく TIFF 情報と IPTC 情報なんですけどね。まあどーでもいいです*1。
また今回も前回と同じく ExifTool を使います。
やはり Homebrew を使って
$ brew install exiftool
で。
書き込みたいコピーライト情報が 2018 ©riocampos
だとすると
$ exiftool -copyright="2018 ©riocampos" -overwrite_original /Users/riocampos/Pictures/target_photo_file.jpg
で OK(いわゆる「まるしー」が © とかに文字化けしてるかもしれませんけど、はてなダイアリーの都合*2なので気にしないでね)。-overwrite_original
オプションは上書きするためのものです。上書きせずにコピーライト情報を入れた新規写真ファイルを作るのならば省いてください。
また、実行するとこのような警告が出ます
Warning: [minor] Entries in IFD0 were out of sequence. Fixed. - /Users/riocampos/Pictures/target_photo_file.jpg
が、単に「情報の書き込み先が無かったから追加したよ」という意味なので気にしないで。
残念なことに「Webに上がってる写真はフリー素材」と思ってるひとは非常に多いようです。つまり、写真をフリー素材として扱われないために、写真をWebへ上げる場合には対策を講じる必要があります。私なんぞだと盗まれるのは写真ぐらいしかありませんが、イラストや動画をアップロードすることがある人はもっともっと注意してください。
緯度経度を Geocoding などの Web サービスで求めると、0.000001度(小数点以下6桁)精度で値を返してくれます*1。0.000001度というのは1マイクロ度(1μ°)。さて、この一番下位の桁が1ずれる(1μ°ずれる)と、距離にしてどれくらいずれるのでしょうか?という素朴な疑問が生じました。
@riocampos が普段生活しているのは北緯35度(島根県浜田市から千葉県館山市を結ぶ線上)付近。なのでこの辺りでの1マイクロ度当たりの距離を求めれば良いのです。
国土地理院が測量計算(距離と方位角の計算)という Web サービスを提供してくれています、ありがたいですね。ここで1マイクロ度ずらした緯度経度を入力して、距離を算出させてみます。
北緯35度東経135度を基準点として算出させました。
緯度経度の差 | 距離 |
---|---|
緯度1μ° | 0.111m |
緯度10μ° | 1.109m |
緯度100μ° | 11.094m |
経度1μ° | 0.091m |
経度10μ° | 0.913m |
経度100μ° | 9.129m |
つまり緯度も経度も、1マイクロ度で10cm、10マイクロ度で1mのずれになる、ってことでした。
よって、Web サービスで求めた緯度経度で、一番下位の桁(小数点以下6桁)ぐらいずれても大したことないのですね。
1m は地球の1周の長さを基準にして決められた、ということをご存じの方もおられるでしょう。より正しく言えば「子午線に沿った地球1/4周(赤道(北緯/南緯0度)から極点(北緯/南緯90度)まで)の長さを『1万km』となるように1mを決めた」わけです*2。ということは、1万kmが緯度の90度に相当するわけですね。
よって1度は1万km/90≒111km、すなわち111000m、さらに書き換えると0.111×106mぐらいになります。
1マイクロ度というのは1×10-6度です。よって距離としては(0.111×106×1×10-6)m、階乗部分が打ち消しあいますので0.111mになります。上で求めた値とほぼ合致しますね!
とはいえ上の計算は地球の子午線が全くの円形であるとして計算したことになります。実際の子午線は楕円なので、少しずれます。とはいえそこまで細かい精度は必要ありませんから、特に問題ないでしょう。
*1:なお Google Maps のURLでは小数点以下7桁になってますが、精度面で意味あるかといわれると無いですね。なにせ 1cm 精度になってしまうので。
*2:今の1mの定義は違いますよ
普段の写真は iPhone 6s で満足なのですが、ときどき優秀な望遠ズームとマクロが欲しい @riocampos です。
今はずっと前に妻が買った
RICOH ハイブリッドAFシステム搭載 光学10.7倍ズーム CX5 グリーンシルバー CX5GS
高級機種には GPS 機能が載っていたのですが、さすがにコンパクトデジカメにまでは GPS が載っていない時代。 iPhone で撮影すると勝手に位置情報が加わるのに「もすもす」で撮影すると位置情報が分からない。それを写真.appで同じように扱うと、すこし辛い。位置検索できないし。
以前、iPhone でのトラックログを Mac で見るときには myTracks - The GPS solution for iOS and macOS というアプリを使っていました。この myTracks を使うと写真ファイルにも位置情報を追加出来たのです。ただし。「以前」というのは、このアプリがまだ無料だった時代のこと。今は有料アプリになりました。まあ有料でも良いのだけど、ただ機能的に $17.99 は高いのではと感じるのですよ。セコいのだけど。
Windows ユーザーであれば カシミール3D / 風景CGと地図とGPSのページ があるので何も考える必要はありませんな。しかも位置情報を埋め込むための デジカメプラグイン もありますので、この記事自体が要らないw
ということで何らかの優秀な CUI ツールが存在しないかなーと探したところ、当然のように存在していました。
ExifTool by Phil Harvey
というか、世の中の EXIF が扱えるほとんどの GUI アプリは ExifTool を使っている、ような気もします*2。
しかも超優秀なツールなので、経度緯度の直接設定でも、トラックログのデータから位置補完しての設定でも、いろいろと位置情報を設定することが可能。そして…無料。素晴らしい。神ツールと呼ぶに相応しい。
ということで ExifTool を使って位置情報を追加する方法を(自分用に)記録しておきます。
上記サイトからインストールすれば良いです。ただし Homebrew を使っているのであれば
$ brew install exiftool
するのがラクでいいです。しかも ExifTool は更新が頻繁に行われるので、メンテナンス性の面からも Homebrew でのインストールをオススメします。
まずは、写真に埋め込みたい位置の緯度経度を求めます。
などの Web サービスを使うのが便利です。
もしくはGoogle Mapsでも若干の手間をかければ求められます。
場所の座標を調べる
- パソコンで Google マップを開きます。Google マップをライトモードで使用中で、画面下部に稲妻のアイコンが表示されている場合は、場所の座標を表示できません。
- 地図上の目的の場所を右クリックします。
- [この場所について] を選択します。
- 画面下部のカードに座標が表示されます。
例えば大阪城。
Lat Long
(34.687315, 135.526201)
GPS Coordinates
34° 41' 14.334'' N
135° 31' 34.3236'' E
Latitude and Longitude Finder on Map Get Coordinates
二つのサービスとも同じく「緯度: 34.687315 経度: 135.526201」になりました。
ではこれを写真一枚、もしくは複数の写真に設定します。念のために大元の写真ファイルではなく、コピーした写真ファイルを使いましょう。
今回は写真10ファイルが入ったディレクトリを指定しています。写真一枚なのであれば、ファイルパスを直接指定すれば良いです。
$ exiftool -P -overwrite_original -gpslatitude=34.687315 -gpslongitude=135.526201 /Users/riocampos/Pictures/100RICOH/ 1 directories scanned 10 image files updated
さて。ExifTool のオプションについて順番に簡単に説明します。
-P
(-preserve
) -overwrite_original
-o
(-out
)オプションを指定して、その引数に出力先ディレクトリを指定してください(ディレクトリなので末尾の/
を忘れないように)。-gpslatitude=XX.XXXX
(または -exif:gpslatitude=XX.XXXX
)-gpslongitude=YYY.YYYY
(または -exif:gpslongitude=YYY.YYYY
)-v
======== /Users/riocampos/Pictures/100RICOH/RIMG0001.JPG Rewriting /Users/riocampos/Pictures/100RICOH/RIMG0001.JPG... Editing tags in: APP0 APP1 GPS IFD0 JFIF MIE-GPS XMP JPEG APP1 (xxxxx bytes): Rewriting IFD0 Rewriting ExifIFD Rewriting MakerNoteRicoh Rewriting ImageInfo Rewriting RicohSubdir Rewriting FaceInfo Rewriting FirmwareInfo Rewriting SerialInfo Rewriting InteropIFD Creating GPS Rewriting IFD1 JPEG APP2 (xxx bytes): JPEG DQT (xxx bytes): JPEG SOF0: JPEG DHT (xxx bytes): JPEG SOS
そして ExifTool はコマンドの末尾に処理目的のファイルパスを指定します。
Error: [minor] Bad format (512) for MakerNotes entry 0
などという MakerNotes エラーが出て位置情報が追加出来ない場合には[minor]
と書いてありますし、焦らず騒がずマイナーエラーを無視する -m
オプションで対応しましょう*4。
詳細は 15. "I get MakerNote warnings or errors when reading or writing information"|ExifTool FAQ をお読みください。
例示するとこんな感じ。この場合はkmlファイルですけど、gpxファイルでも大丈夫。
$ exiftool -P -overwrite_original -geotag /Users/riocampos/Downloads/history-2018-08-07.kml /Users/riocampos/Downloads/100RICOH
そのうちに ExifTool のオプションについての解説記事が書ければいいなあ。高機能でしかも無料なので、みんなで使いましょうね。
まだ GPS なしコンパクトデジカメで撮影したものに exiftool で GPS 情報を付加しております。その際には SD カードを Mac に接続してオリジナル画像で更新し、 iPhone にSD カードリーダを繋いで読み込ませています。その際に使うリーダは純正のこちら ↓
Apple Lightning - SDカードカメラリーダー
$ exiftool "-FileModifyDate<DateTimeOriginal" *.JPG
やはりありがたいツールです> exiftool 。
(参考:exiftoolでファイルの変更日時を写真の撮影日にする方法 - Qiita)
兄から送られてきた写真が回転されずに保存されていたのだけど、きっと exif データの回転指定だけで何とかなるだろうと思って検索したところ、やはり exiftool で解決出来ました。
$ exiftool -P -overwrite_original -Orientation=6 -n RIMG0001.JPG # 6:時計回り90度 $ exiftool -P -overwrite_original -Orientation=8 -n RIMG0002.JPG # 8:反時計回り90度
参考サイト:
クセのあるデジカメが好きなので、現時点だとこのあたりがいいなあ*5。
ソニー コンパクトデジタルカメラ サイバーショット Cyber-shot DSC-RX100M6
ソニー SONY デジタルカメラ Cyber-shot DSC-RX100M7【最大望遠200mm・1インチセンサー高画質】
RICOH 防水デジタルカメラ RICOH WG-50 オレンジ 防水14m耐ショック1.6m耐寒-10度 RICOH WG-50 OR 04581
パナソニック コンパクトデジタルカメラ ルミックス TZ90 光学30倍 4K動画記録 シルバー DC-TZ90-S
パナソニック コンパクトデジタルカメラ ルミックス TZ95 光学30倍 ホワイト DC-TZ95-W
Canon コンパクトデジタルカメラ PowerShot G9 X Mark II ブラック 1.0型センサー/F2.0レンズ/光学3倍ズーム PSG9XMARKIIBK
すみません、今回はデバッグのための更新です。NHKのせいではありません…。
それから、基礎英語0のストリーミングサイトが他の番組と若干異なっております。そのため、もしかすると5月に再度更新するかもしれません。
と書いておりましたが、5月に変わったら予期していた仕掛けが上手く行かず暴発しましたorz
ということで、またいつものところ
NHK語学講座のラジオ番組ストリーミングを取得するRubyスクリプトgogakuondemand.rb(v1804_1 2018/5/5更新版) - 別館 子子子子子子(ねこのここねこ)をご覧ください。
ダウンロードもそこから行えます。
よろしくお願いします。
NHK大好きな[twitter:@riocampos]です。
毎度おなじみ gogakuondemand.rb を更新しました。
今回は年度変更に伴う番組変更への対応を行いました。具体的には
以上の3番組への対応です。
また、ダウンロード範囲を同一年度に限定しました。特に
の為の変更です。ボキャブライダーは未だに2017年度のファイルもアップされているのでダウンロード出来ますが、いちいち全ファイルの確認を行う必要も無いと思いましたのでそのように変更しました。
なお、pref.rb ファイルでの "school_year" 設定変更で2017年度分もダウンロード可能ですが、ボキャブライダー以外の番組に対してもダウンロード対象年度が限定されます。必要なときにだけ変更してください。
それから、基礎英語0のストリーミングサイトが他の番組と若干異なっております。そのため、もしかすると5月に再度更新するかもしれません。
またいつものところ
NHK語学講座のラジオ番組ストリーミングを取得するRubyスクリプトgogakuondemand.rb(v1804 2018/4/9更新版) - 別館 子子子子子子(ねこのここねこ)
をご覧ください。
ダウンロードもそこから行えます。
よろしくお願いします。
サーバ的環境から JavaScript が必要なブラウザアクセスする場合はいままでずっと PhantomJS を使ってきたわけですが、残念ながら PhantomJS は2017年6月ごろで開発を終了したそうです*1。
ということで遅まきながら Headless Chrome を使ってみることにしましたのでメモ書きします。
これが一番のネックでした。Chrome に内蔵されていないと思ってなかったので、古いバージョンのまま使っていました。その際のエラーはこんな感じ。
browser = Watir::Browser.new(:chrome, headless: true) Selenium::WebDriver::Error::UnknownError: unknown error: unrecognized Chrome version: HeadlessChrome/64.0.3282.186 (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Mac OS X 10.12.6 x86_64) from /Users/riocampos/.anyenv/envs/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.9.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
chromedriver=2.27
ってちゃんと出てますよね。気付けよ>俺。
で。chromedriver の更新を今後も継続的に行うため、今回は Homebrew でインストールすることにしました。現時点のバージョンは2.35。
$ brew info chromedriver chromedriver: stable 2.35 Tool for automated testing of webapps across many browsers https://sites.google.com/a/chromium.org/chromedriver/ Not installed From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/chromedriver.rb ==> Caveats To have launchd start chromedriver now and restart at login: brew services start chromedriver Or, if you don't want/need a background service you can just run: chromedriver $ brew install chromedriver ==> Downloading https://chromedriver.storage.googleapis.com/2.35/chromedriver_mac64.zip ######################################################################## 100.0% Error: The `brew link` step did not complete successfully <==ここでエラー出ていることに気付こう… The formula built, but is not symlinked into /usr/local Could not symlink bin/chromedriver Target /usr/local/bin/chromedriver already exists. You may want to remove it: rm '/usr/local/bin/chromedriver' To force the link and overwrite all conflicting files: brew link --overwrite chromedriver To list all files that would be deleted: brew link --overwrite --dry-run chromedriver Possible conflicting files are: /usr/local/bin/chromedriver ==> Caveats To have launchd start chromedriver now and restart at login: brew services start chromedriver Or, if you don't want/need a background service you can just run: chromedriver ==> Summary 🍺 /usr/local/Cellar/chromedriver/2.35: 4 files, 11.3MB, built in 16 seconds
インストールは終わったので確認。
$ which chromedriver /usr/local/bin/chromedriver $ chromedriver Starting ChromeDriver 2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9) on port 9515 <==バージョンが以前のものになっていることに気付こうよ… Only local connections are allowed. ^C
ということで古いものを削除。
$ rm '/usr/local/bin/chromedriver' $ brew link chromedriver Linking /usr/local/Cellar/chromedriver/2.35... 1 symlinks created
現時点のバージョンは3.9.0。ちなみに3.6.0から「PhantomJS は deprecated」と出るようになりました。
$ gem update selenium-webdriver Updating installed gems Updating selenium-webdriver Fetching: selenium-webdriver-3.9.0.gem (100%) Successfully installed selenium-webdriver-3.9.0 Gems updated: selenium-webdriver
現時点のバージョンは6.10.3。Headless Chrome が使えるようになったのは6.6からだそうです。
インストールログを消しちゃいましたが、まあ selenium-webdriver と同様に gem update
しちゃえばいいわけで。
Headless Chrome を先に起動した状態から Chrome も起動しようとしたのですが、起動しませんでした。どうやら先に画面ありのふつうの Chrome を起動しておかないとダメみたいですね。まあ普段は Mac の起動と同時に Chrome も立ち上げますから問題無いでしょう。
$ pry [1] pry(main)> require 'watir' => true [2] pry(main)> browser = Watir::Browser.new(:chrome, headless: true) => #<Watir::Browser:0x..fbfcb7aab4783eb70 url="data:," title=""> [3] pry(main)> browser.goto "www.yahoo.co.jp" => "http://www.yahoo.co.jp" [4] pry(main)> browser.screenshot.save("yahoo.jpg") 2018-03-01 16:07:06 WARN Selenium name used for saved screenshot does not match file type. It should end with .png extension => #<File:yahoo.jpg (closed)>
スクリーンショットは png じゃないと怒られるようです(以前はそんなことなかったのに。
ではこの記事のサイトを撮影しましょう。
[5] pry(main)> browser.goto('http://d.hatena.ne.jp/riocampos+tech/20180301/watir_with_headless_chrome') => "http://d.hatena.ne.jp/riocampos+tech/20180301/watir_with_headless_chrome" [6] pry(main)> browser.screenshot.save('htd.png') => #<File:htd.png (closed)>
こんなスクリーンショットが撮れました。
*1:とはいえ最新の PhantomJS は http://phantomjs.org/release-2.1.3.html を見ると2018年1月リリースなんだよね。