如何通过URL获取字体并转换为Base64(Data Uri)?

时间:2014-05-27 09:54:26

标签: php

如何通过URL获取字体并在PHP中转换为Base64(Data Uri)?

PHP代码:

function getDataURI($fontUrl, $mime = '') {
$content = get_web_page($fontUrl);
$content = $content['content'];
return 'data: '.(function_exists('mime_content_type') ? mime_content_type($fontUrl) : $mime).';base64,'.base64_encode($content);

}

结果:

@font-face {
font-family: 'LinotypeUniversW01-Ligh 723625';
src: url('data:font/opentype;base64,PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+IDxodG1sPjxoZWFkPiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+IDx0aXRsZT5FUlJPUjogVGhlIHJlcXVlc3RlZCBVUkwgY291bGQgbm90IGJlIHJldHJpZXZlZDwvdGl0bGU+IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLSAgICVsICBib2R5IDpsYW5nKGZhKSB7IGRpcmVjdGlvbjogcnRsOyBmb250LXNpemU6IDEwMCU7IGZvbnQtZmFtaWx5OiBUYWhvbWEsIFJveWEsIHNhbnMtc2VyaWY7IGZsb2F0OiByaWdodDsgfSA6bGFuZyhoZSkgeyBkaXJlY3Rpb246IHJ0bDsgZmxvYXQ6IHJpZ2h0OyB9ICAtLT48L3N0eWxlPiA8L2hlYWQ+PGJvZHk+IDxkaXYgaWQ9InRpdGxlcyI+IDxoMT5FUlJPUjwvaDE+IDxoMj5UaGUgcmVxdWVzdGVkIFVSTCBjb3VsZCBub3QgYmUgcmV0cmlldmVkPC9oMj4gPC9kaXY+IDxocj4gIDxkaXYgaWQ9ImNvbnRlbnQiPiA8cD5UaGUgZm9sbG93aW5nIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSB0cnlpbmcgdG8gcmV0cmlldmUgdGhlIFVSTDogPGEgaHJlZj0iaHR0cDovLy8vc3RhdGljLnN0aWhsLmNvbS9qb2Jib2Vyc2UvY3NzL2ZvbnRzL2U4OTM3OWQyLTI2MDQtNDFhYi05MTFmLWNjODlmM2U0YjQ5Yi5lb3RvcGVudHlwZSI+aHR0cDovLy8vc3RhdGljLnN0aWhsLmNvbS9qb2Jib2Vyc2UvY3NzL2ZvbnRzL2U4OTM3OWQyLTI2MDQtNDFhYi05MTFmLWNjODlmM2U0YjQ5Yi5lb3RvcGVudHlwZTwvYT48L3A+ICA8YmxvY2txdW90ZSBpZD0iZXJyb3IiPiA8cD48Yj5VbmFibGUgdG8gZGV0ZXJtaW5lIElQIGFkZHJlc3MgZnJvbSBob3N0IG5hbWUgPHE+PC9xPjwvYj48L3A+IDwvYmxvY2txdW90ZT4gIDxwPlRoZSBETlMgc2VydmVyIHJldHVybmVkOjwvcD4gPGJsb2NrcXVvdGUgaWQ9ImRhdGEiPiA8cHJlPkludmFsaWQgaG9zdG5hbWU8L3ByZT4gPC9ibG9ja3F1b3RlPiAgPHA+VGhpcyBtZWFucyB0aGF0IHRoZSBjYWNoZSB3YXMgbm90IGFibGUgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUgcHJlc2VudGVkIGluIHRoZSBVUkwuIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGNvcnJlY3QuPC9wPiAgPHA+WW91ciBjYWNoZSBhZG1pbmlzdHJhdG9yIGlzIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXIlVyI+d2VibWFzdGVyPC9hPi48L3A+IDxicj4gPC9kaXY+ICA8aHI+IDxkaXYgaWQ9ImZvb3RlciI+IDxwPkdlbmVyYXRlZCBUdWUsIDI3IE1heSAyMDE0IDA4OjUxOjA2IEdNVCBieSBwcm94eTIuaW5mcmEubmV0IChzcXVpZC8yLjcuU1RBQkxFOSk8L3A+IDwhLS0gRVJSX0ROU19GQUlMIC0tPiA8L2Rpdj4gPC9ib2R5PjwvaHRtbD4g');}

但是这段代码无效。

当我转换图像时,一切正常。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案:

http://snipplr.com/view.php?codeview&id=70078

 /**
 * Data URI base64 PHP function.
 * 
 * @author        Pierre-Henry Soria <ph7software@gmail.com>
 * @copyright     (c) 2012-2013, Pierre-Henry Soria. All Rights Reserved.
 * @license       Lesser General Public License (LGPL) <http://www.gnu.org/copyleft/lesser.html>
 * @param         string $sFile The path of your file to encode.
 * @return        string The encoded data in base64.
 */
function base64DataUri($sFile)
{                   

    // Switch to right MIME-type
    $sExt = strtolower(substr(strrchr($sFile, '.'), 1));

    switch($sExt)
    {
        case 'gif':
        case 'jpg':
        case 'png':
            $sMimeType = 'image/'. $sExt;
        break;

        case 'ico':
            $sMimeType = 'image/x-icon';
        break;

        case 'eot':
            $sMimeType = 'application/vnd.ms-fontobject';
        break;

        case 'otf':
        case 'ttf':
        case 'woff':
            $sMimeType = 'application/octet-stream';
        break;

        default:
            exit('Invalid extension file!');
    }

    $sBase64 = base64_encode(file_get_contents($sFile));
    return "data:$sMimeType;base64,$sBase64";
}