画像変換

概要

元コンテンツで指定されている画像ファイルを元コンテンツサーバから取得し端末にあわせた画像フォーマット・解像度に変換して出力することが可能です。この機能により、コンテンツを作成する際には1つの画像を用意することですべての端末に対応できます。
また、コンテンツルールごとに変換の有無を指定することも出来ます。

設定

設定はcontentsRuleDefault.xmlもしくはcontentsRule.xmlのimageConvertTypeで行います。

形式

画像変換を行う時

<ContentsRule>
    <!-画像変換を行う時--->
    <Attribute name="imageConvertType">ImageConvert</Attribute>
</ContentsRule>

画像変換を行わない時

<ContentsRule>
    <!-画像変換を行わない時--->
    <Attribute name="imageConvertType">NoImageConvert</Attribute>
</ContentsRule>

動作

ImageConvert設定時

画像変換を行ないます。
x-Servletは元コンテンツで指定されている画像ファイルを元コンテンツサーバから取得し端末にあわせた画像フォーマット・解像度に変換して出力します。
コンテンツを作成する際には1つの画像を用意することですべての端末に対応できます。
また、元画像の解像度が端末の解像度を超えている場合には画像の縮小を行います。
その際には縦横両方の解像度が機種情報の定義された解像度以下になるように縮小を行います。アスペクト比の変更は行いません。
更に、JPGから他のフォーマットへ変換する場合やBMPへ変換する場合には減色処理が行われます。
減色に際してはcontentsRuleDefault.xmlもしくはcontentsRule.xmlのimageConvertConcreteParametersの設定に従います。
縮小処理に対する設定はありません。

メリット

  • 1枚の画像を用意すればいいので、更新の早いコンテンツには便利です。
  • 画像の大きさを考慮する必要がありません。

デメリット

  • 画像変換の処理を行うため、動作が多少重くなります。

NoImageConvert設定時

画像のリサイズ、減色処理などの一切の画像変換を行ないません。
ただし、画像のファイルパスが相対パスでかかれている場合は、x-Servletは元コンテンツで指定されている画像ファイルの拡張子部分を端末にあわせて読み替えたファイルを元コンテンツサーバにリクエストし、それをそのまま端末に出力します。

メリット

  • 画像変換を行わないため、動作は軽くなります。

デメリット

  • すべての端末で表示可能なコンテンツを作成する際には対象とする端末に対応するGIF、PNG、BMP、JPEGのそれぞれの画像を用意しておく必要があるため、更新の早いコンテンツには不向きです。
  • 端末の解像度に対して大きい画像の場合、表示されない事があります。

元画像フォーマット

元画像として利用できる画像フォーマットは以下のとおりです。

  • GIF 8bit color
  • JPG 24bit color
  • PNG 8bit color
  • BMP 2bit color
※透過GIFには対応しておりません。透過GIFは通常のGIFとして処理されます。
※x-Servlet Version2.10.1 以下で JDK1.7.0_25 以上を用いると、透過GIFファイル、透過PNGファイルを変換した場合に画像が正常に表示されない、またはハングアップする現象が発生します。
※x-Servlet では GIFアニメの画像ファイルを指定された場合、最初の1枚のみ抜き出してリサイズ・減色処理を行い、静止画として変換します。アニメーションGIFを使用したい場合は「アニメーションGIFを表示させたい」を参照ください。

拡張タグ

<img>タグの拡張属性を使用する事により、画像変換について詳細な設定をすることが可能です。
画像変換機能では各端末のキャッシュサイズに応じた適切なファイルサイズへの変換を行いたい場合、<img>タグにqualityFixsizeFixadaptiveを指定することにより、キャッシュサイズを考慮して画像変換を行います。

画像キャッシュによる負荷軽減

画像変換は比較的負荷の高い処理のため、出来るだけ変換回数を少なくしたほうがパフォーマンス的に有利です。x-Servletは端末から画像のリクエストが発生した場合、変換結果が再利用可能かどうかを確認するために"If-Modified-Since"HTTPリクエストヘッダをつけて元コンテンツサーバにリクエストを行ないます。元コンテンツサーバが"304 Not Modified"レスポンスを返してきた場合、可能であれば変換結果の再利用を行ないます。
このような動作を行なっているため"If- Modified-Since"に対応していない画像コンテンツの場合はパフォーマンスが悪化する可能性があります。

レイアウト最適化機能

Version2.10.0以上

従来の画像縮小処理に加え、設定された元コンテンツの解像度とアクセスしている端末の解像度の比率ですべての画像を縮小する機能が追加されました。
これによりサムネイル画像などを用いたページでもレイアウトが崩れません。

設定はcontentsRuleDefault.xmlもしくはcontentsRule.xmlのbaseLayoutWidthに元コンテンツの横幅を設定することで有効になります。
"false"に設定した場合はレイアウト変換機能が無効となり、従来と同様の変換となります。

※画像に対してwidthが指定されているとレイアウト最適化が機能しません。
※レイアウト最適化は画像に対してのみ適応されます。<table>タグ等のブロック要素には無効です。
baseLayoutWidthに元コンテンツの横幅を正しく設定しなかった場合、最適化された画像が荒くなることがあります。

表示例

元コンテンツがVGA(横480ピクセル)で作成されたコンテンツの変換例を以下に示します。

変換前

元コンテンツ
元コンテンツ
元コンテンツは横480ピクセルで構成されるのでバナー等は480ピクセルで作成され、サムネイル画像は190ピクセルで作成されています。

変換後(QVGA端末に変換)

最適化機能無効
(Version2.9.2までと同様)
最適化機能有効
元コンテンツ 元コンテンツ
240ピクセルを超える画像は縮小されていますが、
240ピクセル未満であるサムネイル画像は190ピクセルのまま縮小されません。
このため、コンテンツのレイアウトが崩れてしまいます。
元コンテンツの横幅(480ピクセル)と端末の解像度(240ピクセル)の比率で全ての画像が縮小されているので元コンテンツと同じレイアウトを維持しています。

また、縮小するピクセルサイズの下限を指定するlayoutImageMinWidthOutputや、
指定したピクセル以下の画像ファイルは縮小しないlayoutImageMinWidthInputなどが設定できます。

画像変換の画質調整

Version2.10.0以上

従来の画像変換アルゴリズムに加え、新しい縮小・減色アルゴリズムを選択できるようになりました。
また、画像効果としてシャープネスが追加されました。

設定はcontentsRuleDefault.xmlもしくはcontentsRule.xmlのimageConvertConcreteParametersで一括して指定するか、
<img>タグに直接指定することができます。

注意点

  • 画像変換機能の使用に関わらず、以下の準備が必要になります。
    JAI(Java Advanced Imaging) 1.1.2_01以降
  • 画像の縮小処理は減色処理のみより画質が劣化します。
  • レイアウト最適化を行うと変換対象となる画像が増えるため、最適化しない場合と比較してパフォーマンスが低下します。
  • 特定の画像の画像変換を行わないようにする場合は、<img>タグ内にuseoriginalを記述することで実現できます。

    <img src="foo.jpg" useoriginal>

  • Version2.10.1 以下の場合でアスペクト比が極端な画像を縮小する時、縦・横のどちらかが 1px未満のサイズになった場合、変換エラーが発生します。
    エラー発生時はステータスコード500 が端末に返され、接続は切断されます。
    Version2.10.2 以上の場合は最低サイズを 1px として画像が縮小されるため、エラーは発生しません。

参考

  • 画像を転送できないように設定できます。詳細は「画像の転送をさせたくない」を参照ください。
  • x-Servletを通して画像ファイルに直接アクセスした場合、通常は画像ファイルではなく imgタグのみを含んだhtmlファイルを返しますが、contentsRuleDefault.xmlもしくはcontentsRule.xmlのdirectImageConvertを"false"に設定すると元の画像のまま返します。
TOP