9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsとherokuでURLスクリーンキャプチャーを取る方法

Posted at

URLスクリーンキャプチャを行う方法は、
大きく3つあります。

1、スクリーンショット取得用WEBサービスの利用

簡単に導入できるけど、他社サービスに依存。

2、JSで取得

⬇みたいなのがありましたが、canvasタグを使うのでHTML5が前提。

よって、オールドブラウザは使えない

3、仮想フレームバッファ(Xvfb)+ブラウザ経由

何でもできる。けど実装難度(工数)が高い。

ということで、何でもできるという点を評価し、
上記3で実装を行いました。

実装方法

実装難度が高いと言いましたが、
これはルート権限があれば、比較的簡単に実装が出来ます。

ところが、今回はherokuが前提となっているため。
少々手こずりました。(少々じゃないか。。)

結論から言うと、

IMGkitを使う

IMGkitとは、wkhtmltoimage(Qt4を使用してhtmlレンダリングを行い、イメージ出力するソフト)をラッパーしたgemです。

wkhtmltoimageをダウンロードして、IMGkitでパスを指定してあげれば、
以下のような記述でスクリーンショットを取得できます。

config
IMGKit.configure do |config|
  config.wkhtmltoimage = Rails.root.join('bin', 'wkhtmltoimage-amd64').to_s if ENV['RACK_ENV'] == 'production'
end
model
file = Tempfile.new(["hogehoge", '.png'], 'tmp', :encoding => 'ascii-8bit')
file.write(IMGKit.new(hogehoge_url, quality: 100, :"crop-w" => 1024).to_png)

で、コントローラ側でDJで呼びつつ、
保存先にcarrierwaveを組み合わせるとベストかと。

日本語が文字化けするんですけど・・・

herokuな方は、fontconfigを使うを参考にしてみてください。

追記

※ リクエスト処理のバリデーションが甘いのでexconを使って事前にチェックするといいですよ。
※ DJは、まわす方じゃないよ、Delayed_job!本家みるとDJで呼んでほしいみたい。
※ wkhtmltoimageはwkhtmltopdfの一部で、PDF出力することも出来ます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?