如何利用 composer 替換第三方包裏的某個類(color-thief-php爲例)

一, 修改composer.json

composer require ksubileau/color-thief-php

{
    "require": {
        "ksubileau/color-thief-php": "^1.4"
    },
    //  autoload 加載自定義修改後類 的方法,來替換vendor中的類  的方法,
    //  只修改要改類 的方法,其他 與 vendor中的類一致
    "autoload": {     
        "classmap": [
            "ColorThief/CMap.php"
        ]
    }
}

二,修改原因:color-thief-php只能提取色值不能計算佔比呀

1,修改 ColorThief\CMap.php 文件
    public function palette()
    {
        $total = array_sum($this->vboxes->map(function ($x) {
            return $x['vbox']->count();
        }));

        return $this->vboxes->map(function ($vb) use ($total) {
            return array(
               $vb['color'], 
               (int)($vb['vbox']->count() / (float)$total * 100)
            );
        });
    }

    // 註釋爲原來的代碼
    /*public function palette()
    {
        return $this->vboxes->map(function ($vb) {
            return $vb['color'];
        });
    }*/
2,目錄結構

在這裏插入圖片描述

3,使用color-thief-php
composer install
composer dump-autoload
// 圖片路徑
$tempPicPath = RUNTIME_PATH . 'test.jpg';
 
// 色值top?
$colorCount = 3;
 
// 提取質量1最高
$colorQuality = 1;
 
// 開始提取
$palette = ColorThief::getPalette($tempPicPath, $colorCount, $colorQuality);
        
print_r($palette);

在這裏插入圖片描述

    // RGB 轉爲 顏色值(#FF0011)
    function rgbToColor($R, $G = -1, $B = -1)
    {
        if (is_array($R) && sizeof($R) == 3) {
            list($R, $G, $B) = $R;
        }
        $R = intval($R);
        $G = intval($G);
        $B = intval($B);
        $R = dechex($R < 0 ? 0 : ($R > 255 ? 255 : $R));
        $G = dechex($G < 0 ? 0 : ($G > 255 ? 255 : $G));
        $B = dechex($B < 0 ? 0 : ($B > 255 ? 255 : $B));
        $COLOR = (strlen($R) < 2 ? '0' : '') . $R;
        $COLOR .= (strlen($G) < 2 ? '0' : '') . $G;
        $COLOR .= (strlen($B) < 2 ? '0' : '') . $B;
        return '#' . $COLOR;
    }

三,參考:

https://blog.csdn.net/yssong1028/article/details/92829334

https://segmentfault.com/q/1010000007298980

發佈了104 篇原創文章 · 獲贊 21 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章