アダプティブメディアの画像スケーリングの変更

アダプティブメディアの画像スケーリングの変更

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

記載のように 適応型メディアユーザーガイド、適応型メディアは、管理者@物によって定義される画像の解像度に一致するように画像をスケーリングします。 通常、デフォルトのスケーリングが適していますが、必要に応じてカスタマイズすることもできます。 ただし、その前に、このスケーリングの仕組みを理解する必要があります。

アダプティブメディアの画像スケーリングについて

アダプティブメディアには、画像のスケーリング方法を置き換えることができる拡張ポイントが含まれています。 AMImageScaler インターフェース を定義適応型メディアのイメージスケーリングロジック。 デフォルトでは、Adaptive Mediaはこのインターフェイスの2つの実装を提供します。

  • AMDefaultImageScaler:デフォルトの画像スケーラー。 常に有効であり、画像処理とスケーリングに java.awt を使用します。

  • AMGIFImageScaler:GIF画像でのみ機能するスケーラー。 Liferay DXPインスタンスの外部ツール gifsicle のインストールに依存します。 このスケーラーは、 コントロールパネルシステム設定で有効にする必要があります。

AMImageScaler インターフェイスを使用して、Liferay DXPのOSGiコンテナーにイメージスケーラーを登録する必要があります。 各スケーラーは、 mime.type プロパティを、処理するMIMEタイプに設定する必要もあります。 たとえば、スケーラーのMIMEタイプを image / jpegと、そのスケーラーは イメージ/ jpeg イメージのみを処理できます。 特別なMIMEタイプ *を指定すると、スケーラーは任意の画像を処理できます。 の場合 AMDefaultImageScalermime.type = *を使用して登録され、 の場合 AMGIFImageScalermime.type = image / gifを使用して登録されます。 すべてのスケーラーと同様に、両方のスケーラーは AMImageScaler実装し` 。

同じMIMEタイプであっても、必要な数のイメージスケーラーを追加できます。 それでも、Adaptive Mediaは画像ごとに1つのスケーラーのみを使用し、このプロセスを使用して最適なスケーラーを決定します。

  1. 画像と同じMIMEタイプで登録された画像スケーラーのみを選択します。

  2. 最初のステップで選択されたスケーラーから有効なスケーラーを選択します(AMImageScaler` メソッド `isEnabled()` は有効なスケーラーに対して `true` を返します)。

  3. 3

    2番目のステップで選択したスケーラーのうち、最高の service.ranking持つスケーラーを選択します。

これらの手順で結果が返されない場合は繰り返されますが、最初の手順では特別なMIMEタイプ *ます。 また、イメージスケーラーが特定のMIMEタイプに登録されており、 service.rankingが高い場合、特別なMIMEタイプ * 登録されているか、 service.ranking低い場合よりも選択される可能性が高いことに注意してください。 。

イメージスケーラーの作成

アダプティブメディアが画像を拡大縮小する方法を理解したので、この拡大縮小をカスタマイズする方法を学習します。 例として、PNG画像のスケーリングをカスタマイズするサンプル画像スケーラーが表示されます。

カスタムイメージスケーラーを作成するには、次の手順に従います。

  1. 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;
    
  2. スケーラーを有効にする場合は、 isEnabled() メソッドを実装して true を返します。 多くの場合、常にスケーラーを有効にする必要があるため、このメソッドで true を返すだけで済みます。 これは、サンプル SampleAMPNGImageScalerです:

    @Override
    public boolean isEnabled() {
        return true;
    }
    

    この方法は、スケーラーが他のツールまたは機能に依存している場合にさらに興味深いものになります。 たとえば、 AMGIFImageScalerisEnabled() メソッドは、gifsicleが有効かどうかを決定します。 このスケーラーは、依存するツールであるgifsicleも有効になっている場合にのみ有効にする必要があります。

    @Override
    public boolean isEnabled() {
        return _amImageConfiguration.gifsicleEnabled();
    }
    
  3. 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;
    

すばらしいです\! これで、独自のイメージスケーラーの作成方法がわかりました。

関連トピック

アプリでの適応画像の表示

適応画像の検索

複数のデバイス間でメディアを適応させる

« 適応画像の検索ソーシャルAPI »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています