CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景

すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ねたことから始まりました。写真があります。そのメインカラーを取得します。

取得した色の値を使用して、次のような関数を実装します。コンテナー内に画像があり、背景色を画像の主な色と一致させたい場合、次のようになります。

全員が提案してくれました。計算には Canvas を使うことを提案する人もいれば、専用のオープンソース ライブラリを推奨する人もいました。どちらも良かったです。

では、この機能は CSS を使用して実現できるのでしょうか?

夢物語のようです。CSS でこの効果を実現できるのでしょうか?えーと、CSS を使うと、確かに画像のおおよそのメインカラーを満足のいく形で得ることができます。メインカラーの要件が特に厳密でない場合は、これは良い方法です。一緒に見ていきましょう。

画像のテーマカラーを取得するには、filter: blur() と transform: sacle() を使用します。

ここでは、ぼかしフィルターと拡大効果を使用して、画像のテーマカラーを大まかに取得します。

次のような画像があるとします。

<div></div>

画像にぼかしフィルターを適用します。

div {
    背景: url("https://i0.wp.com/airlinkalaska.com/wp-content/uploads//aurora-2.jpg?resize=1024%2C683&ssl=1");
    背景サイズ: カバー;
    フィルター: ぼかし(50px);
}

効果を見てみましょう。比較的大きなぼかしフィルターを使用して、 blur(50px) 。ぼかした画像はそれっぽい感じがしますが、ぼやけたエッジがいくつかあります。 overflowを使用してトリミングしてみてください。

次に、ぼやけたエッジを削除し、 transform: scale()で効果を増幅して、色に再び焦点を当てる必要があります。コードを少し変更します。

div {
    位置: 相対的;
    幅: 320ピクセル;
    高さ: 200px;
    オーバーフロー: 非表示;
}

div::before {
    コンテンツ: "";
    位置: 絶対;
    上: 0;
    左: 0;
    右: 0;
    下部: 0;
    背景: url("https://i0.wp.com/airlinkalaska.com/wp-content/uploads//aurora-2.jpg?resize=1024%2C683&ssl=1");
    背景サイズ: カバー;
    // コアコード:
    フィルター: ぼかし(50px);
    変換: スケール(3);
}

結果は次のとおりです。

このように、CSS を使用して画像の主な色を取得すると、効果はかなり良好になります。

完全なコードはここにあります: CodePen デモ - フィルターとスケールで画像の主な色を取得します

デメリット

もちろん、この解決策にもいくつか小さな問題があります。

画像の主な色は大まかにしか取得できず、あまり正確ではありません。また、 filter: blur(50px) 50pxデバッグが必要です。blur フィルター自体がパフォーマンスを消費します。ページにこの方法で取得した複数の背景がある場合、パフォーマンスに一定の影響を与える可能性があります。実際に使用する場合は、一定のトレードオフを行う必要があります。

やっと

さて、今回の記事はここまでです。CSSを使って画像のテーマカラーを取得する裏技を紹介しました。参考になれば幸いです😃

この方法を提案してくれたYuewenの学生、XboxYanに感謝します。iCSS WeChatグループは非常に活発で、CSSの専門家が集まっています。技術について議論するためにグループに参加したい学生は、私のWeChat coco1sを追加できます(グループには200人以上がいるので、グループに参加するためにコードをスキャンすることはできません。招待することしかできません)

素晴らしい CSS 技術記事が私の Github -- iCSS に集められています。これらは継続的に更新されています。星をクリックして購読し、収集してください。

CSS を解析して画像のテーマカラーを抽出する方法についてはこれで終わりです。CSS による画像のテーマカラーの抽出についてさらに詳しく知りたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  HTMLでカメラを読み込む方法

>>:  Web ページでの Unicode 文字の使用の概要 (&#、\u など)

推薦する

CentOS7.3 での MySQL 8.0.13 のインストールと設定のチュートリアル

1. 基本環境1. オペレーティングシステム: CentOS 7.3 2. MySQL: 8.0.1...

Centos7でglibcをアップグレードするとシステム異常(起動できない)になる場合の解決方法

目次問題の原因:解決:解決:私は Centos7 を使用しています (理論的にはこの方法は Cent...

dockerネットワーク双方向接続の詳細な説明

Dockerネットワークを見るdocker ネットワーク ls [root@master ~]# d...

nginx における proxy_pass のさまざまな使用法の詳細な説明

目次プロキシ転送ルール最初のもの: 2番目のタイプ: 3番目のタイプ: 4番目のタイプ: 5番目:プ...

SQLの最適化では間違いがよく起こります。それはMySQLのExplain Planの使い方を理解していないからです。

目次1. 準備2. 説明計画の概要3. フィールドの詳細な説明4. パーティションクエリにはパーティ...

テーブル切り替えのための JavaScript プラグインのカプセル化

この記事では、テーブル切り替えプラグインを実装するためのJavaScriptのカプセル化コードを参考...

APPログインインターフェースシミュレーション要求を実装するためのPostmanデータ暗号化と復号化

目次主に使用されるPostmanの機能データの暗号化と復号化さまざまなパラメータ設定実際に送信された...

表に斜めヘッダー効果を出す5つの方法

誰もがテーブルをよく知っているはずです。コード内でよく見かけます。テーブルにスラッシュ ヘッダーを追...

スライダー間隔コンポーネントのネイティブ js 実装

この記事の例では、スライダー間隔コンポーネントを実装するためのjsの具体的なコードを参考までに共有し...

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法

Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...

JavaScriptのプリミティブ値とラッパーオブジェクトの詳細な紹介

目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...