画像拡張子変更

概要

x-Servletは機種情報で定義されている対応画像拡張子(useragent.xmlの画像フォーマット形式 <Format>)を参照し、端末に対して最適な拡張子を選択して、画像の拡張子を変更します。 また、コンテンツルールごとに設定を指定することも出来ます。

設定

設定はcontentsRuleDefault.xmlもしくはcontentsRule.xmlのimageFormatSelectionLevelおよびfollowImageConvertFormatで行います。
デフォルトはimageFormatSelectionLevel=2、followImageConvertFormat=trueとなっており、通常編集する必要はありません。

形式

<ContentsRule>
    <Attribute name="imageFormatSelectionLevel">2</Attribute>
    <Attribute name="followImageConvertFormat">true</Attribute>
</ContentsRule>

動作

具体的には以下の手順で拡張子の決定をします。

imageFormatSelectionLevel

サーバのフォルダにある画像データのうち、どれを使用するか選択方法を指定します。

1設定時

  1. useragent.xmlの<Format>の先頭にある拡張子を採用する。

2設定時

  1. 元コンテンツの<img>タグに記述されている画像ファイルの拡張子がuseragent.xmlの<Format>に含まれていたらその拡張子を採用する。
  2. 1に失敗した場合、useragent.xmlの<Format>の先頭にある拡張子を採用する。

followImageConvertFormat

<img>タグを出力する際に用いる、画像拡張子の決定方法を指定します。

false設定時

  1. 機種情報で定義されている対応画像拡張子のうちの先頭のもの(useragent.xmlの<Format>の先頭にある拡張子)を採用する。

true設定時

  1. 元コンテンツの<img>タグに記述されている画像ファイルの拡張子がuseragent.xmlの<Format>に含まれていたらその拡張子を採用する。
  2. 1に失敗した場合、useragent.xmlの<Format>の先頭にある拡張子を採用する。

例としてN702iDについての結果一覧を下記にまとめます。contentsRuleDefault.xmlもしくはcontentsRule.xmlのimageConvertTypeおよびimageFormatSelectionLevelによって端末への表示結果が変わります。

useragent.xml

<Format>GIF</Format>
<Format>JPG</Format>

実際サーバにある画像

png.png
jpg.jpg

No 元コンテンツの記述 imageConvertType imageFormat
SelectionLevel
followImage
ConvertFormat
端末表示結果
1 <img src="jpg.jpg">
(useragent.xmlに設定があり、
端末で表示が可能)
ImageConvert
(画像変換有り)
1 FALSE jpg.gifを表示
2 2 FALSE jpg.jpgを表示
3 1 TRUE jpg.gifを表示
4 2 TRUE jpg.jpgを表示
5 NoImageConvert
(画像変換無し)
1 FALSE jpg.gifを表示しようとして失敗
6 2 FALSE jpg.jpgを表示
7 1 TRUE jpg.gifを表示しようとして失敗
8 2 TRUE jpg.jpgを表示
9 <img src="png.png">
(useragent.xmlに設定は無く、
端末で表示は不可能)
ImageConvert
(画像変換有り)
1 FALSE png.gifを表示
10 2 FALSE png.gifを表示
11 1 TRUE png.gifを表示
12 2 TRUE png.gifを表示
13 NoImageConvert
(画像変換無し)
1 FALSE png.gifを表示しようとして失敗
14 2 FALSE png.gifを表示しようとして失敗
15 1 TRUE png.gifを表示しようとして失敗
16 2 TRUE png.gifを表示しようとして失敗

また、followImageConvertFormatによってクライアント⇔x-Servlet⇔元コンテンツサーバ間での送信HTMLが変わります。
以下で、送信HTTPデータの画像データに関連した抜粋を比較します。(HTTPデータの書式はdebug.logをご覧ください)
左側のfollowImageConvertFormat=falseの場合、useragent.xmlの<Format>の先頭にある拡張子が採用され端末に出力される画像の拡張子はgifになります。右側のfollowImageConvertFormat=trueの場合は、 useragent.xmlの<Format>の中から該当する拡張子が採用され、jpgで出力されます。

上記No.2
followImageConvertFormat=false
他は同条件
上記No.4
followImageConvertFormat=true
他は同条件
INFO [15:16:10] - [<- WEB]
<img src="jpg.jpg" alt="gazou">
INFO [15:16:10] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:16:10] - [<- WEB]
Content-Type: image/jpeg
INFO [15:16:11] - [BROWSER <-]
<img src="jpg_xpimg_jpg.gif?_xpxi=oeFMeT.0.
CTR0q-0.g" alt="gazou">
INFO [15:16:13] - [BROWSER ->]
GET /img/jpg_xpimg_jpg.gif?_xpxi=oeFMeT.0.
CTR0q-0.g HTTP/1.1
INFO [15:16:13] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:16:13] - [<- WEB]
HTTP/1.1 304 Not Modified
INFO [15:16:13] - [BROWSER <-]
Content-Type: image/jpeg
INFO [15:11:47] - [<- WEB]
<img src="jpg.jpg" alt="gazou">
INFO [15:11:47] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:11:47] - [<- WEB]
Content-Type: image/jpeg
INFO [15:11:48] - [BROWSER <-]
<img src="jpg_xpimg_jpg.jpg?_xpxi=hJftIl.0.5n
KM7-0.g" alt="gazou">
INFO [15:11:58] - [BROWSER ->]
GET /img/jpg_xpimg_jpg.jpg?_xpxi=hJftIl.0.5n
KM7-0.g HTTP/1.1
INFO [15:11:58] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:11:58] - [<- WEB]
HTTP/1.1 304 Not Modified
INFO [15:11:58] - [BROWSER <-]
Content-Type: image/jpeg

ここで、imageFormatSelectionLevel=1の場合、強制的にuseragent.xmlの<Format>の先頭にある拡張子を採用されてしまうため、同じ結果になります。

上記No.1
followImageConvertFormat=false
他は同条件
上記No.3
followImageConvertFormat=true
他は同条件
INFO [15:13:16] - [<- WEB]
<img src="jpg.jpg" alt="gazou">
INFO [15:13:16] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:13:16] - [<- WEB]
Content-Type: image/jpeg
INFO [15:13:18] - [BROWSER <-]
<img src="jpg_xpimg_jpg.gif?_xpxi=FG7IC3.0.ABrwa
-0.g" alt="gazou">
INFO [15:13:19] - [BROWSER ->]
GET /img/jpg_xpimg_jpg.gif?_xpxi=FG7IC3.0.AB
rwa-0.g HTTP/1.1
INFO [15:13:19] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:13:19] - [<- WEB]
HTTP/1.1 304 Not Modified
INFO [15:13:19] - [BROWSER <-]
Content-Type: image/gif
INFO [15:06:35] - [<- WEB]
<img src="jpg.jpg" alt="gazou">
INFO [15:06:35] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:06:35] - [<- WEB]
Content-Type: image/jpeg
INFO [15:06:36] - [BROWSER <-]
<img src="jpg_xpimg_jpg.gif?_xpxi=yi5BAS.0.
FYes9-0.g" alt="gazou">
INFO [15:06:37] - [BROWSER ->]
GET /img/jpg_xpimg_jpg.gif?_xpxi=yi5BAS.0.
FYes9-0.g HTTP/1.1
INFO [15:06:37] - [-> WEB]
GET /img/jpg.jpg HTTP/1.0
INFO [15:06:37] - [<- WEB]
HTTP/1.1 304 Not Modified
INFO [15:06:37] - [BROWSER <-]
Content-Type: image/gif

注意点

  • x-Servletが<img>変換のセパレータとして"_xpimg_"と"*"を使用しますのでリンクを表す文字列中には"_xpimg_"と"*"を使用しないでください。
  • 画像の拡張子の読み替えを行わないようにするには、画像ファイル自体をx-ServletのcontentsRule.xmlで指定されていないディレクトリに配置するか、画像ファイルをhttp://から始まる絶対URIで記述する方法があります。
    また、imgタグ内にuseoriginalを記述することで拡張子の読み替えを行わないオプションも有ります。
    ただし、useoriginalを記述すると画像変換も行われません。

    <img src="foo.jpg" useoriginal>

  • Version2.1以前の動作で稼動させたい場合にimageFormatSelectionLevel=1、followImageConvertFormat=falseと設定してください。
TOP