imagemagicで画像の一括リサイズ(名前も変更する)編
次のフォルダ構成に格納されている画像を
g
├── x001
│ ├── 0.png
│ ├── a.jpg
├── x002
│ ├── b.jpg
└── x003
├── 0.jpg
├── 1.jpg
こんな感じにしたい。
g
├── x001
│ ├── 0.png
│ ├── 0_300x300.png
│ ├── a.jpg
│ ├── a_300x300.jpg
├── x002
│ ├── b.jpg
│ ├── b_300x300.jpg
└── x003
├── 0.jpg
├── 0_300x300.jpg
├── 1.jpg
├── 1_300x300.jpg
次のようなコマンドになる。
find . -regex "\.\/.*\/[0-9]*\..*" | xargs -P8 -I{} convert {} -set filename:x "%d/%t_300x300.%e" -resize 300x300 "%[filename:x]"
それぞれ解説。
対象画像のリストアップ
findコマンドで正規表現を利用する - 屑プログラマの憂鬱 を参照
xargsを使ってImageMagickに渡す
pipeを利用すると、findの結果数が多くて処理が落ちてしまうので、xargsを利用してImageMagickに一つ一つ渡してあげます。
xargs -P8 -I{}
-P8 は、プロセスの並列数です。ImageMagickのconvertが並列で8つ立ち上がります。PCの性能が許す限り増やしていきましょう。
-I {} は、findの実行結果であるファイル名が入る置換文字列を利用するというオプションです。
ImageMagickでリサイズする
ImageMagickのconvertを利用します。基本的なリサイズ方法としては次のとおりです。アスペクト比を保ちつつリサイズしてくれます。
convert input_file -resize (width)x(height) output_file
ファイル名を変更する場合は、次のようになります。
-set filename:x "%d/%t_300x300.%e"で、filename:xという変数に"%d/%t_300x300.%e"を代入し、出力ファイル名として、\"%[filename:x]"(filename:xという変数そのままを出力結果とする)としています。
他にも属性は存在して、Format and Print Image Properties @ ImageMagick にまとまっています。
RubyでCSVファイルに記載されたURLの画像をダウンロードする
書捨てのプログラムを作成したので貼る。
require 'csv' require 'fileutils' require 'open-uri' csv_data = CSV.read('image_url.csv') puts "start..." csv_data.each do |data| id = data[0] url = data[1] sleep(2) #2秒待つ FileUtils.mkdir_p("./images/#{id}") begin open(url) do |file| open("./images/#{id}/0.jpg", "w+b") do |out| out.write(file.read) end end rescue OpenURI::HTTPError => e p e end p data end puts "complete!"
ビジネスエアポート東京という皇居の濠端を臨むレンタルオフィス
JR東京駅からも徒歩7分とアクセス抜群で、「移動に便利」「お客様を招きやすい」と好評です。皇居の濠端を臨むロケーションにあり、ラウンジから見える豊かな緑が癒しを与えてくれます。
皇居の濠端を臨むという最高なロケーションだったので利用してみた。
会員でなくても一日5000円で利用可能。
安くない金額だが、皇居の濠端を臨みながら行う仕事は、エリートになった気分です。ただ、安価でいい場所は他にもありそう。
Laravelのベストプラクティス
Laravelの開発におけるベストプラクティスがまとめられている。
It's not a Laravel adaptation of SOLID principles, patterns etc. Here you'll find the best practices which are usually ignored in real life Laravel projects.
有益な情報がコンパクトにまとまっていて良い。
知っている内容は多かったが、LaravelからJavascriptにデータを渡す際に次のようにするのは新しい知見だ。Jsのオーバーヘッドは気になるが、確かにJsonで渡せば型情報を渡せるわな。
<input id="article" type="hidden" value="@json($article)">
let article = $('#article').val();
テキストエディタの正規表現でWhere In句の一部を生成する
a001 a002 a003
といった文字列から
'a001', 'a002', 'a003'
みたいなのをテキストエディタで生成したい。
CotEditorの場合次のとおりになる。
検索条件
^(.*)\n
置換条件
'$1',