国旗の使い方1
これです
モチベーション
国旗って眺めてるだけで面白くないですか?アルゼンチンの
真ん中のやつとかなかなか良い表情をしてます。
じゃあこれはだーれだ?
はいウルグアイでしたー
じゃあ朴訥な彼は?
え?エクアドルっすよ!
こういう国旗の画像を集めてCocoaとかから使いたい。
収集
国連加盟国だけでも193あるので、一枚にかけるサイズは抑えつつ、国旗に細かく描かれていることを表現してもらいたい。ので、ベクターイメージを集めることにする。WikipediaのFlag_of_国名.svg
のファイルを引っ張ってくるんでもいいが、ググったら一発目で
見つけちゃった
これを使うことにします。
CocoaでのSVGの扱い
Cocoa ApplicationでSVGを直に使うことはできません。残念でした。SVGを扱えるようにするライブラリは色々あるのですが、
https://github.com/SVGKit/SVGKit https://github.com/mchoe/SwiftSVG
SVGを使えるようにする程度ならそんなにめんどくさくないので自分で加工します。具体的にはSVGをPDFにしちゃえばいいだけです。PDF変更後のファイルサイズは最悪SVGの2倍くらいになっちゃうのですが、元の国旗のSVGはでかくても数十kbなのであんまり気にしない。
npm install
git cloneでもいいんですが、ここでは後々のためにnpmで管理します。
package.json
を書いて
{ "dependencies": { "flag-icon-css": "^2.8.0" } }
npm installしましょう
npm install
はい
SVG > PDF
node_modules/flags
の中に1x1と4x3の比率のsvgが転がってます。
国旗の形とかサイズはその国が勝手に規定してるものなんですが、オリンピックとかになると4x3に統一されたりするらしいです。
ネパールとかいう異端児もいますが、
ここでは我慢して長方形の枠の中に収まっていただきたい。
SVGからPDFへの変換は、精度が良かったprawn-svg
を使います。rubyです。
package.jsonと同じところにgenerate.rb
を作ります。
require "prawn" require "prawn-svg" src = "./node_modules/flag-icon-css/flags/4x3/" dist = "./dist/" Dir.mkdir(dist) unless File.exists?(dist) Dir.entries(src).select { |f| if File.extname(src + f)==".svg" name = File.basename(src + f, ".svg") Prawn::Document.generate(dist + name + ".pdf", page_size: [600, 800], page_layout: :landscape) do svg IO.read(src + f), position: :center, vposition: :center, width: 800, height: 600 end end }
ついでにpackage.json
にスクリプトも追加して
{ "scripts": { "gem:install": "gem install prawn-svg", "pdf": "ruby generate.rb" }, "dependencies": { "flag-icon-css": "^2.8.0" } }
svgを丸ごとpdfにします。
npm run gem:install npm run pdf
はいできた
ここまでできたらCocoaのAssetを追加してドラッグ&ドロップするだけですが、255ファイルあるんでいちいち追加するのは辛いです。次回は全部の国旗をCocoaからごそっと丸ごと使えるようにします。