Otomatik olarak CSS dosyası karanlık arka kullanılacak dönüştürmek

2 Cevap php

Bu gibi yaklaşık 200 CSS dosyaları var:

/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for bnf
 * CSS class: , CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.bnf .de1, .bnf .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.bnf  {font-family:monospace;}
.bnf .imp {font-weight: bold; color: red;}
.bnf li, .bnf .li1 {font-weight: normal; vertical-align:top;}
.bnf .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.bnf .li2 {font-weight: bold; vertical-align:top;}
.bnf .sy0 {color: #000066; font-weight: bold;}
.bnf .st0 {color: #a00;}
.bnf .st1 {color: #a00;}
.bnf .re0 {color: #007;}
.bnf .ln-xtra, .bnf li.ln-xtra, .bnf div.ln-xtra {background-color: #ffc;}
.bnf span.xtra { display:block; }

Ancak bu CSS dosyaları renkler sadece ışık (tercihen beyaz) arka üzerinde ok bakmak için tasarlanmıştır. Bir algo (PHP kodu ifade edebilir) onları (yakın siyah) koyu arka güzel görünmesi için bu dosyaları renkleri uygulayabilirsiniz var mı? Ben sadece tüm renkleri ters olmalıdır olabilir? Ya da daha iyi bir yolu var mı?

2 Cevap

Onların ters değerlerine bir CSS dosyası bulunan tüm renk değerlerini dönüştürmek için bu işlevi kullanabilirsiniz:

function inverseColors($css) {
    preg_match_all('/#([a-f0-9]{6}|[a-f0-9]{3})/i', $css, $matches);
    $original = $matches[0];
    $inversed = array();
    foreach($matches[1] as $key => $color) {    
        $parts = str_split($color, strlen($color) == 3 ? 1 : 2);
        foreach($parts as &$part) {
            $part = str_pad(dechex(255 - hexdec($part)), 2, 0, STR_PAD_LEFT);
        }
        $inversed[$key] = '#'.implode('', $parts);    
    }

    $css = str_replace($original, $inversed, $css);
    echo $css;
}

Bu hem üç ve altı haneli onaltılık renk değerleri üzerinde çalışacağız. Ama bu optimum renk, ters renk muhtemelen düzeni için iyi olmayacak neden olmayacağını unutmayın. Daha iyi sonuçlar, tüm renkler için bir arama tablosu oluşturma ve yeni CSS bu değerleri ikame edilmesi suretiyle elde edilebilir.

Tüm CSS dosyaları döngü, bir özyinelemeli arama yapmak için SPL sınıfları kullanabilir, ardından kullanarak CSS dosyaları değiştirin

file_put_contents($file, inverseColors(file_get_contents($file)));

PHP's documentation about glob (yorum bölümünde) tüm dosyaları ve dizinleri yinelemek için nasıl daha fazla bilgi edinmek için bir göz atın.

If the CSS files contain some set of colors, you could define new colors for each available color first.
Then you read a complete CSS file into a variable with the file_get_contents function. Apply str_replace to repalce all colors with their new values and finally use file_put_contents to write the file back. (using another name?)

, 200 CSS dosyalarını işlemek readdir, opendir kullanmak ve toplu işlem edebiliyoruz böylece closedir, CSS dosyalarını içeren dizinin içeriğini okumak için renk değerlerini dönüştürmek için PHP kodu.