ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

CutyCaptを使ってWindows でQtアプリ配布を考える

公開日| 2011年02月05日 | 1つのコメントがあります。
概要 :
今回は、Qtを利用しているツールCutyCaptです。

最近では、Qtを使ったツールも随分増えましたね。
今回は、Qtを使ったオープンソースなツールCutyCaptを使えるようにしてみましょう。

CutyCaptとは、
コマンドラインから、ウェブページを画像ファイルへ落とすことのできるツールです。
画像ファイルには、pngはもちろん、Qtの画像用プラグインが対応しているjpeg,gif,tiffなどにも対応しています。

このツールは、
例えば、ウェブサイトの紹介などをしたい時などに便利です。
簡単に紹介したいウェブサイトのページを画像ファイルにしてくれるので、紹介ページなどに簡単に張り付けることができます。
また、自動的にウェブサイトのサマリー画像なども採取できるようにもなると思います。

早速、使ってみましょう。

CutyCaptの使い方

まずは、CutyCaptの使い方を、ちょっとだけ解説しておきます。

Windowsバイナリファイルは、以下からダウンロードできます。
ダウンロード先 : http://cutycapt.sourceforge.net/
上記サイトの画面中央あたりのDownloadから最新のファイル一式をダウンロードしてください。
現在(2011.02)の最新バージョンは、CutyCapt-Win32-2010-04-26.zip (7MB, .exe for Win32 systems)

ダウンロードしたファイルは、CutyCapt.exeのみが圧縮されています。

使い方は、簡単です。
コマンドプロンプトから、以下のように入力すればOK。

> CutyCapt.exe --url=http://www.yahoo.co.jp --out=yahoo.jpg


これで、Yahoo! Japanのトップページが画像ファイルyahoo.jpgへ保存されます。
--urlは、保存したいサイトのURLを指定します。
--outは、保存したいファイル名を指定します。
※ファイル形式は、拡張子で自動で切り替わります。特別な拡張子を使う場合は、--out-formatで出力画像フォーマットを指定しましょう。

以下は、その保存したイメージです。
Yahoo! Japannのトップ画像
※このサイトの画面サイズ上、小さく加工しています。クリックするとその時に保存された画像がそのまま表示されます。

CutyCaptの使い方は、上記のパラメータだけではありません。
ヘルプでコマンドのパラメータがすべて表示されます。
 -----------------------------------------------------------------------------
 Usage: CutyCapt --url=http://www.example.org/ --out=localfile.png
 -----------------------------------------------------------------------------
  --help                         Print this help page and exit
  --url=<url>                    The URL to capture (http:...|file:...|...)
  --out=<path>                   The target file (.png|pdf|ps|svg|jpeg|...)
  --out-format=<f>               Like extension in --out, overrides heuristic
  --min-width=<int>              Minimal width for the image (default: 800)
  --min-height=<int>             Minimal height for the image (default: 600)
  --max-wait=<ms>                Don't wait more than (default: 90000, inf: 0)
  --delay=<ms>                   After successful load, wait (default: 0)
  --user-styles=<url>            Location of user style sheet, if any
  --header=<name>:<value>        request header; repeatable; some can't be set
  --method=<get|post|put>        Specifies the request method (default: get)
  --body-string=<string>         Unencoded request body (default: none)
  --body-base64=<base64>         Base64-encoded request body (default: none)
  --app-name=<name>              appName used in User-Agent; default is none
  --app-version=<version>        appVers used in User-Agent; default is none
  --user-agent=<string>          Override the User-Agent header Qt would set
  --javascript=<on|off>          JavaScript execution (default: on)
  --java=<on|off>                Java execution (default: unknown)
  --plugins=<on|off>             Plugin execution (default: unknown)
  --private-browsing=<on|off>    Private browsing (default: unknown)
  --auto-load-images=<on|off>    Automatic image loading (default: on)
  --js-can-open-windows=<on|off> Script can open windows? (default: unknown)
  --js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown)
  --print-backgrounds=<on|off>   Backgrounds in PDF/PS output (default: off)
 -----------------------------------------------------------------------------
  <f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm
 -----------------------------------------------------------------------------
 http://cutycapt.sf.net - (c) 2003-2010 Bjoern Hoehrmann - bjoern@hoehrmann.de

Qtアプリの配布の仕方

CutyCaptは、ファイル1つで配布されています。
CutyCaptのライセンスが、GPLライセンスなので、Qtをstatic lib でリンクして1つのファイルにしてもOKです。
例えば、CutyCaptをGPLライセンスでないClosed source(ソースコードを公開したくない)の場合、QtのLGPLライセンスに従わなくてはなりません。

Qtのライセンスは、大きく2つあります。
・GPL/LGPL版
・商用版
商用版では、自分で作成したソースコードの公開義務などは、ライセンス上発生しません。
ここで、問題なのは、GPL/LGPL版です。
4.5以前は、GPL版なので、自分で作成したソースコードは、すべて公開する必要がありました。
しかし、4.5以降では、LGPL版なので、条件によって自分で作成したソースコードを公開しなくて良くなりました。
参照 :
(画面中段)

つまり、Windowsでは、Qtをstatic lib でリンクしてはいけません。DLL でリンクすることになります。

DLLリンクするということは、QtのライブラリをDLLで配布するということですね。

Qtアプリの配布の簡単な手順をCutyCaptを使ってやってみましょう。

Qtアプリの依存関係を調べる

まずは、CutyCaptをLGPL版QtでDLL Linkしましょう。
LGPL版QtのVC++ 2008 版の環境があるものとして以下話をしてみます。

  1. CutyCaptのソースコードをダウンロードします。
    ダウンロード先 : http://cutycapt.sourceforge.net/
    ソースコードは、Source codeの欄に、
    The source code is available in the SVN repositorty (download tarball).
    とありますから、そこからダウンロードします。
  2. CutyCapt.proをQt Creatorで開いてコンパイルします。
    Qtの開発環境(VC++2008)に問題なければ、何も問題ないはずです。もし、エラーなどが出るようならQtの環境を確認しましょう。

ここまでで、CutyCapt.exeという最新のファイルができたはずです。

このQtアプリ(CutyCapt)が、どのDLLに依存しているかを調べます。これには、Dependency Walkerが最も簡単に調べることができます。
参考記事:

CutyCapt.exeをDependency Walkerで開けば、依存関係を表示してくれます。便利ですね。

Dependency Walkerの画面
依存している全てのDLLファイルは、画面中段の表に一覧表示してあります。
ほとんどは、OSで提供しているものです。ここでOSで提供している以外に必要なDLLファイルが、Qtアプリと一緒に配布してあげる必要のあるDLLファイルになります。
ここで必要なDLLファイルは、概ね、以下のファイルであることがわかります。

  • MSVCP90.DLL
  • MSVCR90.DLL
  • PHONON4.DLL
  • QTCORE4.DLL
  • QTGUI4.DLL
  • QTNETWORK4.DLL
  • QTSVG4.DLL
  • QTWEBKIT4.DLL
  • QUERY.DLL
  • QUTIL.DLL

上記のファイルとCutyCapt.exe を一緒に配布すれば、どのWindowsの環境(Windows2000 以降)でも動作するはずです。
ほとんど何も設定していないようなWindows上で、上記のファイル一式を適当なディレクトリへコピーして動作確認すれば、良いわけです。

> CutyCapt.exe --url=http://www.yahoo.co.jp --out=yahoo.jpg

yahoo.jpgという画像ファイルが作成されません。
pngフォーマットでもためしてみましょう。

> CutyCapt.exe --url=http://www.yahoo.co.jp --out=yahoo.png

pngフォーマットでは、yahoo.pngという画像ファイルが、ちゃんと、できました。
でも画像は、正しく作成されていないようです。
以下は、その保存したイメージです。
Yahoo! Japannのトップ画像
※このサイトの画面サイズ上、小さく加工しています。クリックするとその時に保存された画像がそのまま表示されます。

サイトの画像が、ほとんど表示されていませんね。

これは、Qtアプリの中で、画像プラグインを利用しているために発生する問題です。

当たり前なんですが、Dependency Walkerでは、動的なDLLのリンクまでは、確認できません。

png画像は、Qtの基本ライブラリに組み込まれていますが、それ以外の画像については、画像プラグインとして組み込まれることになります。

Qt画像プラグインは、WindowsではDLLで提供されています。これも当たり前ですが。
提供場所は、QtをインストールしたディレクトリをQTDIRとしたら、

QTDIR\plugins\imageformats\
 
   qgif4.dll
   qgifd4.dll
   qico4.dll
   qicod4.dll
   qjpeg4.dll
   qjpegd4.dll
   qmng4.dll
   qmngd4.dll
   qsvg4.dll
   qsvgd4.dll
   qtiff4.dll
   qtiffd4.dll

と、12個のファイルがありますが、*d4.dllは、デバッグ用ですから、実際は、6個ということです。

qgif4.dll gifフォーマット用のプラグインです。
qico4.dll icoフォーマット用のプラグインです。
qjpeg4.dll jpegフォーマット用のプラグインです。
qmng4.dll mngフォーマット用のプラグインです。
qsvg4.dll svgフォーマット用のプラグインです。
qtiff4.dll tiffフォーマット用のプラグインです。


それぞれの画像フォーマット毎にプラグインが用意されています。
CutyCapt.exeで対応したい画像フォーマット対応のプラグインをCutyCapt.exeと一緒に同梱してあげれば、良いのですね。

但し、ここで注意すべきは、CutyCapt.exeと同じディレクトリに、上記のプラグインDLLをそのままコピーしても動作しません。
CutyCapt.exeのあるディレクトリにimageformatsというディレクトリを作成して、そこにコピーしてあげると、ちゃんと動作します。

<CutyCapt_install_dir>\
CutyCapt.exe
MSVCP90.DLL
MSVCR90.DLL
phonon4.dll
QTCORE4.DLL
QTGUI4.DLL
QTNETWORK4.DLL
QTSVG4.DLL
QTWEBKIT4.DLL
<CutyCapt_install_dir>\imageformats\
qgif4.dll
qico4.dll
qjpeg4.dll
qmng4.dll
qsvg4.dll
qtiff4.dll

これだけのファイルを一緒に配布しないと、CutyCapt.exeは正しく動いてくれないんですね。

ここで説明したファイル一式を自己解凍型で作成したもの:

ここでは、個別のプラグインなどのライセンスについては、詳しく調べたものではありません。
実際に配布する場合は、Qtを含めたライセンスに従って配布しましょう。

CutyCaptの場合は、基本がGPLライセンスなので、どうのような配布であってもOKですが、自身のソースコードを見せたくない場合は、ライセンスに注意する必要があります。

コメント

1つのコメントがあります。 “CutyCaptを使ってWindows でQtアプリ配布を考える”


  1. Cagdas
    2012年01月20日 @ 08:55:49

    Thank you for saving my day! I had a customized CutyCapt built and I was wondering why it was not working on the production server. Putting image plugins inside “imageformats” directory just below the application root directory did the trick. God be with you!

    PS: You should better make Björn to give link to your page in http://cutycapt.sourceforge.net/

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ