# NmagemanA

## INDEX

- NmagemanAとは？
- 動作環境
- パッケージ内容
- 注意事項
- インストール方法
- 対応画像
- 利用方法
- 利用リファレンス
- 設定リファレンス(NmagemanA.setting)
- 設定リファレンス(Environments.setting)
- 更新履歴
- 謝辞

NmagemanAとは？

  NmagemanAはアクセス時に画像を動的変換するApache moduleです。

  以下のようなことが可能です。

  - 一サイズの画像を1枚だけ用意してアクセス時に様々なサイズの画像を出力。
  - 一形式の画像を1枚だけ用意してアクセス時に様々な形式の画像を出力。(jpg,png,gif...)
  - 一度変換された画像をキャッシュしてそれ以降のアクセスで出力。
  - アクセスしてきた端末(携帯ブラウザなど)の画面ぴったりに出力。
  - 幅と高さを指定してその中に収まるようなサイズに出力(BOX変換)。
  - 別サーバーにある画像をプロキシして出力。
  - 存在しないファイルにアクセスしても存在するファイルを自動探索して出力。(拡張子探索)
  - 出力時にCopyrightなどのシールを自動貼り付け。(シール機能)
  - など。。。
動作環境

  ## [ for Apache 1.3.x ]

  各OSごとに以下の環境が必要です。

  Linux i386
    libstdc++.so.6, libc.so.6, libm.so.6
  Linux x86_64
    libstdc++.so.6, libc.so.6, libm.so.6
  FreeBSD i386
    -
  FreeBSD amd64
    libstdc++.so.6, libc.so.7, libm.so.5
  MacOSX
    Intel Mac OSX 10.4 以降

  ## [ for Apache 2.0.x ]

  各OSごとに以下の環境が必要です。

  Linux i386
    libstdc++.so.6, libc.so.6, libm.so.6
  Linux x86_64
    libstdc++.so.6, libc.so.6, libm.so.6
  FreeBSD i386
    -
  FreeBSD amd64
    libstdc++.so.6, libc.so.7, libm.so.5
  MacOSX
    Intel Mac OSX 10.4 以降

  ## [ for Apache 2.2.x ]

  各OSごとに以下の環境が必要です。

  Linux i386
    libstdc++.so.6, libc.so.6, libm.so.6
  Linux x86_64
    libstdc++.so.6, libc.so.6, libm.so.6
  FreeBSD i386
    -
  FreeBSD amd64
    libstdc++.so.6, libc.so.7, libm.so.5
  MacOSX
    Intel Mac OSX 10.4 以降

  ## [ for Apache 2.4.x ]

  各OSごとに以下の環境が必要です。

  Linux i386
    libstdc++.so.6, libc.so.6, libm.so.6
  Linux x86_64
    libstdc++.so.6, libc.so.6, libm.so.6
  FreeBSD i386
    -
  FreeBSD amd64
    libstdc++.so.6, libc.so.7, libm.so.5
  MacOSX
    Intel Mac OSX 10.4 以降
パッケージ内容
  NmagemanA.so
    Apache module本体
  NmagemanA.setting
    設定ファイル
  Environments.setting
    端末情報設定ファイル
注意事項
  1. 本ソフトウェアの利用は良識の範囲内でお願い致します。
  2. 本ソフトウェアの利用による損害の保証はお受けできません。
  3. 本ソフトウェアの利用は楽しんで行っていただきますようお願い致します。
インストール方法
  1. "NmagemanA.so" をモジュールとして登録。

     LoadModule Nmageman_module /__your_path__/NmagemanA.so <IfModule NmagemanA.cpp> AddHandler Nmageman .jpg .gif .png <Location /proxy_test/> SetHandler Nmageman </Location> Nmg_SettingFilePath "/__your_path__/NmagemanA.setting" Nmg_EnvsFilePath "/__your_path__/Environments.setting" </IfModule>

  2. 以上で完了です。動作しない場合は以下をご確認ください。
     - キャッシュ機能を利用している場合はCacheディレクトリの書き込み権限。
     - Apacheのログファイル。
対応画像
  jpg, png, gif などに対応しています。
  ただし、アニメーションGIF、MNG には未対応です。
  また、透過GIF、透過PNG を変換後にGIFとして出力すると透明情報がなくなります。
  透過GIF、透過PNG を変換した場合はPNGと出力してください。
利用方法

  画像を変換するには目的画像へのアクセスに、変換指示のQueryStringを付加します。
  QueryStringがない場合には元画像をそのまま返します。

  例: 幅100pxで画像を表示する場合。
    xxx.jpg?w=100
  例: 幅100pxでpngで画像を表示する場合。
    xxx.jpg?w=100&f=png
  例: 端末幅100%で画像を表示する場合。
    xxx.jpg?w=100&su=ep
  例: 幅100px、高100pxに収まるような画像を表示する場合。(BOX変換)
    xxx.jpg?w=100&h=100
利用リファレンス
  w
    幅を指定します。
    指定しない場合は比率固定によるAuto値になります。
    "w"と"h"が両方指定されている場合にはBOX変換になります。
    "w=h"と指定すると "h" の指定値が "w" にも適用されます。
  h
    高さを指定します。
    指定しない場合は比率固定によるAuto値になります。
    "w"と"h"が両方指定されている場合にはBOX変換になります。
    "h=w"と指定すると "w" の指定値が "h" にも適用されます。
  su

    "w"と"h"の単位を指定します。
    指定しない場合はピクセル単位になります。
    値は以下のいずれかを指定してください。

    ep
      端末のブラウザ画面に対する%。
  f
    ファイル形式を指定します。
    指定しない場合は元画像の形式になります。
  jpg
    jpgに変換される場合のクオリティを指定します。[1-100]
  e
    画像を拡大するか否かを指定します。[yes,no]
  ob

    Outer Box 変換を指定します。
    Outer Box 変換では "w" と "h" で表わされるBoxをはみ出してでもぴったりなサイズに変換します。
    Boxからはみ出る分は切り落とすことができます。
    切り落とす指示は2文字で以下のいずれかを指定してください。

    1文字目
      - L : 左を残す。
      - C : 中を残す。
      - R : 右を残す。
    2文字目
      - T : 上を残す。
      - M : 中を残す。
      - B : 下を残す。

    [ex.] /sample.jpg?w=300&h=300&ob=CM

設定リファレンス(NmagemanA.setting)
  <NmagemanA/>

    NmagemanA設定のルート要素。

    属性
      [なし]
    子要素
      - <Enlarge/>
      - <JPGQuality/>
      - <CacheFolderPath/>
      - <CacheDeleteTime/>
      - <DefaultQuery/>
      - <Proxy/>
      - <SearchExts/>
      - <Seal/>
  <Enlarge/>

    拡大の可否を指定します。

    値
      yes、no [Default:yes]
    属性
      [なし]
    子要素
      [なし]
  <JPGQuality/>

    JPG出力時の品質(%)を指定します。

    値
      [Default:90]
    属性
      [なし]
    子要素
      [なし]
  <CacheFolderPath/>
  [Pro][Ent]

    キャッシュフォルダのパスを指定します。
    "NmagemanA.dll"からの相対パスか絶対パスを指定できます。
    空文字列("")を指定するとキャッシュ機能が無効になります。

    値
      [Default:""]
    属性
      [なし]
    子要素
      [なし]
  <DefaultQuery/>

    QueryStringのないアクセス時に利用される既定のQueryStringを指定します。
    変換方法を指定せずに画像ファイルへアクセスした場合の既定の変換方法を指定できます。
    XML構文に従って "w=100&amp;su=ep" などと指定してください。

    値
      [Default:""]
    属性
      [なし]
    子要素
      [なし]
  <Proxy/>
  [Ent]

    変換画像のプロキシ設定をします。
    アクセス時URLが<Map/>で指定される設定に引っ掛かる場合はプロキシします。
    <Map/>は複数指定可能で、上から順に処理されます。
    どの<Map/>にも引っかからない場合はローカルファイルとして処理されます。

    プロキシ先にQueryStringを渡したい場合には以下のうようにアクセスしてください。

    http://aru.host/getimage.php?image=16200?w=300&h=300

    値
      [なし]
    属性
      [なし]
    子要素
      - <Map/>
  <Proxy/> - <Map/>

    変換画像のプロキシマップを指定します。

    値
      Leftでマッチした場合のマッピング先を指定します。
      Leftでマッチした残りの文字列がこの値の後ろに付加されてマッピング先のURLが構成されます。
    属性
      Left
        アクセス時URLのLeftマッチ文字列を指定します。
        マッチ文字列は大文字小文字を区別せず左方一致で判定します。
        正規表現には対応していません。
    子要素
      [なし]
  <SearchExts/>

    拡張子検索機能を設定します。
    アクセス時URLの画像が見つからない場合は<Ext/>で指定した拡張子を検索します。
    <Ext/>は複数指定可能で、上から順に検索が行われます。

    値
      [なし]
    属性
      [なし]
    子要素
      - <Ext/>
  <SearchExts/> - <Ext/>

    検索する拡張子を指定します。
    設定する値に "." は必要ありません。

    値
      "jpg" など
    属性
      [なし]
    子要素
      [なし]
  <Seal/>
  [Ent]

    画像に貼るシールの設定をします。
    アクセス時URLが<Map/>で指定される設定に引っ掛かる場合はシールが貼られます。
    <Map/>は複数指定可能で、上から順に処理されます。
    どの<Map/>にも引っかからない場合はシールが貼られません。

    [シールとは？]
    シールとは画像の上にかぶせられる画像のことです。
    シールは対象画像の大きさにBOX変換され、Alignで指定された位置に貼られます。
    シール画像には32bit透過PNGを利用すると便利です。

    値
      [なし]
    属性
      [なし]
    子要素
      - <Map/>
  <Seal/> - <Map/>

    変換画像のシールマップを指定します。

    値
      Leftでマッチした場合のシール画像のファイルパスを指定します。
      "NmagemanA.dll"からの相対パスか絶対パスを指定できます。
    属性
      Left
        アクセス時URLのLeftマッチ文字列を指定します。
        マッチ文字列は大文字小文字を区別せず左方一致で判定します。
        正規表現には対応していません。
      Align
        シールを貼る位置を指定します。
        2文字で指定し、1文字目が横位置、2文字目が縦位置を意味します。
        [横位置]： "L", "C", "R" (Left, Center, Right)
        [縦位置]： "T", "M", "B" (Top, Middle, Bottom)
        ex. Align="RB" (右下寄せ)
    子要素
      [なし]
  <Module/>
  [Ent]

    Moduleの設定をします。
    <Path/>で指定されるModuleがNmagemanAに追加されます。
    <Path/>は複数指定可能で、上から順に追加されます。
    Moduleは16個まで追加できます。

    [Moduleとは？]
    ModuleとはNmagemanAの機能を拡張するプログラムのことです。
    DLLファイルとして提供されるModuleを自由に組み合わせて利用することができます。
    設定順を変えることで変換のされかたも自由に変えることができます。

    値
      [なし]
    属性
      [なし]
    子要素
      - <Path/>
  <Module/> - <Path/>

    Moduleを指定します。

    値
      Module DLL のパスを相対か絶対で指定します。
    属性
      [なし]
    子要素
      [なし]
設定リファレンス(Environments.setting)
  <environments/>

    Environments設定のルート要素。

    属性
      [なし]
    子要素
      - <UAKey/>
      - <Env/>
  <UAKey/>

    User-Agentのキーとなる文字列パターンを指定します。
    <UAKey/>は複数指定することができます。

    値
      [なし]
    属性
      Pattern
        <Env/>のUserAgent属性として検索対象となるUser-Agentパターンを指定します。
        値は正規表現で指定する必要があります。
        正規表現はPerl互換(Boost.Regex　Perl Regular Expression Syntax)で記述して下さい。
    子要素
      [なし]
  <Env/>

    端末情報を指定します。
    <Env/>は複数指定することができます。

    値
      [なし]
    属性
      UserAgent
        <UAKey/>のPattern属性で対象となる端末のUser-Agentを指定します。
        この値はEnv同士でユニークである必要があります。
      Width
        この端末のブラウザ画面幅をピクセル単位で指定してください。
      Height
        この端末のブラウザ画面高をピクセル単位で指定してください。
    子要素
      [なし]
更新履歴
  2009/07/17
    - Version: 0.5.0.0
  2009/10/08
    - Version: 1.0.0.0
  2013/08/02
    - Version: 1.0.1.0
    - 依存ライブラリの更新
    - Apache 2.4対応
謝辞

  NmagemanAの制作にあたり以下のモノを包含させていただきました。
  各提供者の方々に厚く御礼申し上げます。

  boost
    http://www.boost.org/
  cryptopp
    http://www.cryptopp.com/
  FreeImage
    FreeImage Public License
    --------------------------------------------------------------------------------
    This software uses the FreeImage open source image library. See http://freeimage.sourceforge.net for details.
    FreeImage is used under the FIPL, version 1.0.
  libcurl
    COPYRIGHT AND PERMISSION NOTICE
    Copyright (c) 1996 - 2009, Daniel Stenberg, .
    All rights reserved.
    Permission to use, copy, modify, and distribute this software for any purpose
    with or without fee is hereby granted, provided that the above copyright
    notice and this permission notice appear in all copies.
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
    NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
    OR OTHER DEALINGS IN THE SOFTWARE.
    Except as contained in this notice, the name of a copyright holder shall not
    be used in advertising or otherwise to promote the sale, use or other dealings
    in this Software without prior written authorization of the copyright holder.
  tinyxml
    http://www.grinninglizard.com/tinyxml/
  ProfileData_2008-10-06
    株式会社バリューエンジン