アダプティブメディアの画像スケーリングの変更
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
記載のように 適応型メディアユーザーガイド、適応型メディアは、管理者@物によって定義される画像の解像度に一致するように画像をスケーリングします。 通常、デフォルトのスケーリングが適していますが、必要に応じてカスタマイズすることもできます。 ただし、その前に、このスケーリングの仕組みを理解する必要があります。
アダプティブメディアの画像スケーリングについて
アダプティブメディアには、画像のスケーリング方法を置き換えることができる拡張ポイントが含まれています。 AMImageScaler
インターフェース を定義適応型メディアのイメージスケーリングロジック。 デフォルトでは、Adaptive Mediaはこのインターフェイスの2つの実装を提供します。
-
AMDefaultImageScaler
:デフォルトの画像スケーラー。 常に有効であり、画像処理とスケーリングにjava.awt
を使用します。 -
AMGIFImageScaler
:GIF画像でのみ機能するスケーラー。 Liferay DXPインスタンスの外部ツール gifsicle のインストールに依存します。 このスケーラーは、 コントロールパネル → システム設定で有効にする必要があります。
AMImageScaler
インターフェイスを使用して、Liferay DXPのOSGiコンテナーにイメージスケーラーを登録する必要があります。 各スケーラーは、 mime.type
プロパティを、処理するMIMEタイプに設定する必要もあります。 たとえば、スケーラーのMIMEタイプを image / jpeg
と、そのスケーラーは イメージ/ jpeg
イメージのみを処理できます。 特別なMIMEタイプ *
を指定すると、スケーラーは任意の画像を処理できます。 の場合 AMDefaultImageScaler
は mime.type = *
を使用して登録され、 の場合 AMGIFImageScaler
は mime.type = image / gif
を使用して登録されます。 すべてのスケーラーと同様に、両方のスケーラーは AMImageScaler
実装し` 。
同じMIMEタイプであっても、必要な数のイメージスケーラーを追加できます。 それでも、Adaptive Mediaは画像ごとに1つのスケーラーのみを使用し、このプロセスを使用して最適なスケーラーを決定します。
画像と同じMIMEタイプで登録された画像スケーラーのみを選択します。
最初のステップで選択されたスケーラーから有効なスケーラーを選択します(は
AMImageScaler`
メソッド `isEnabled()` は有効なスケーラーに対して `true` を返します)。
3
2番目のステップで選択したスケーラーのうち、最高の service.ranking
持つスケーラーを選択します。
これらの手順で結果が返されない場合は繰り返されますが、最初の手順では特別なMIMEタイプ *
ます。 また、イメージスケーラーが特定のMIMEタイプに登録されており、 service.ranking
が高い場合、特別なMIMEタイプ *
登録されているか、 service.ranking
低い場合よりも選択される可能性が高いことに注意してください。 。
イメージスケーラーの作成
アダプティブメディアが画像を拡大縮小する方法を理解したので、この拡大縮小をカスタマイズする方法を学習します。 例として、PNG画像のスケーリングをカスタマイズするサンプル画像スケーラーが表示されます。
カスタムイメージスケーラーを作成するには、次の手順に従います。
-
AMImageScaler
を実装するスケーラークラスを作成します。 また、スケーラークラスに@Component
注釈を付け、スケーラーのMIMEタイプごとにmime.type
プロパティを設定し、AMImageScaler
サービスを登録する必要があります。 同じMIMEタイプに複数のスケーラーがある場合は、@Component
アノテーションのservice.ranking
プロパティも設定する必要があります。 スケーラーが同じMIMEタイプの他のスケーラーより優先されるためには、そのサービスのランキングプロパティが他のスケーラーのそれよりも高くなければなりません。service.ranking
が設定されていない場合、デフォルトは0
ます。たとえば、このサンプル画像スケーラーはPNGおよびx-PNG画像をスケーリングし、
100
サービスランキングを持っています:@Component( immediate = true, property = {"mime.type=image/png", "mime.type=image/x-png", "service.ranking:Integer=100"}, service = {AMImageScaler.class} ) public class SampleAMPNGImageScaler implements AMImageScaler {...
これには、次のインポートが必要です。
import com.liferay.adaptive.media.image.scaler.AMImageScaler; import org.osgi.service.component.annotations.Component;
-
スケーラーを有効にする場合は、
isEnabled()
メソッドを実装してtrue
を返します。 多くの場合、常にスケーラーを有効にする必要があるため、このメソッドでtrue
を返すだけで済みます。 これは、サンプルSampleAMPNGImageScaler
です:@Override public boolean isEnabled() { return true; }
この方法は、スケーラーが他のツールまたは機能に依存している場合にさらに興味深いものになります。 たとえば、
AMGIFImageScaler
のisEnabled()
メソッドは、gifsicleが有効かどうかを決定します。 このスケーラーは、依存するツールであるgifsicleも有効になっている場合にのみ有効にする必要があります。@Override public boolean isEnabled() { return _amImageConfiguration.gifsicleEnabled(); }
-
scaleImage
メソッドを実装し。 このメソッドにはスケーラーのビジネスロジックが含まれ、 <code>AMImageScaledImage
インスタンスを返す必要があります。 たとえば、SampleAMPNGImageScaler
のサンプルscaleImage
実装では、AMImageConfigurationEntry
を使用してスケーリングされた画像の最大の高さと幅の値を取得し、FileVersion
を使用して画像をスケーリングします。 スケーリングは、方法と仮定し、プライベート内部クラスの助けを借りて行われる_scalePNG
、_getScalePNGHeight
、_getScalePNGWidth
、及び_getScalePNGSize
実際のスケーリングを実現します。@Override public AMImageScaledImage scaleImage(FileVersion fileVersion, AMImageConfigurationEntry amImageConfigurationEntry) { Map<String, String> properties = amImageConfigurationEntry.getProperties(); int maxHeight = GetterUtil.getInteger(properties.get("max-height")); int maxWidth = GetterUtil.getInteger(properties.get("max-width")); try { InputStream inputStream = _scalePNG(fileVersion.getContentStream(false), maxHeight, maxWidth); int height = _getScalePNGHeight(); int width = _getScalePNGWidth(); long size = _getScalePNGSize(); return new AMImageScaledImageImpl(inputStream, height, width, size); } catch (PortalException pe) { throw new AMRuntimeException.IOException(pe); } } private class AMImageScaledImageImpl implements AMImageScaledImage { @Override public int getHeight() { return _height; } @Override public InputStream getInputStream() { return _inputStream; } @Override public long getSize() { return _size; } @Override public int getWidth() { return _width; } private AMImageScaledImageImpl(InputStream inputStream, int height, int width, long size) { _inputStream = inputStream; _height = height; _width = width; _size = size; } private final int _height; private final InputStream _inputStream; private final long _size; private final int _width; }
これには、次のインポートが必要です。
import com.liferay.adaptive.media.exception.AMRuntimeException; import com.liferay.adaptive.media.image.configuration.AMImageConfigurationEntry; import com.liferay.adaptive.media.image.scaler.AMImageScaledImage; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.util.GetterUtil; import java.io.InputStream; import java.util.Map;
すばらしいです\! これで、独自のイメージスケーラーの作成方法がわかりました。