Вставка изображения в код с использованием data:URL и multipart

Как можно попытаться корректно совместить data URL и включение картинок через протокол mhtml.

Результат — готовый код на PHP из двух функций. Первую функцию («bolk_data_uri_header») нужно вызвать в самом начале перед выводом любого вашего кода, вторую («bolk_data_uri») собственно для включения картинки в код. Надеюсь, на примерах всё понятно:

bolk_data_uri_header();

bolk_data_uri('myjpeg.jpg');
bolk_data_uri('ourpng.png', 'border: 2px dotted red');

//Код самой библиотеки:

function bolk_data_uri_header()
{
echo "<!--\n"
    ."Content-Type: multipart/related; boundary=\"="
    ."_NextPart_01C6A9B1.539AB070\"\n\n"

    ."--=_NextPart_01C6A9B1.539AB070\n"
    ."Content-Transfer-Encoding: base64\n"
    ."Content-Type: text/html\n"

    ."-->\n\n";

}

function bolk_data_uri($file, $style = '')
{
    if (!( file_exists($file) && ($data = @getimagesize($file)) )) 
    return false;

    $name = uniqid('', true);

    if ($style <> '') $style = ' style="'.htmlspecialchars($style).'"';

    echo "<!--\n"

    ."--=_NextPart_01C6A9B1.539AB070\n"
    ."Content-Location: {$name}\n"
    ."Content-Transfer-Encoding: base64\n"

    ."Content-Type: {$data['mime']}; -->\n"
    ."<object data='data:{$data['mime']};base64,\n\n";
    echo base64_encode(file_get_contents($file));

    echo "' {$data[3]}{$style} type='\n{$data['mime']}'><img "

    ."src='mhtml:http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}!{$name}' {$data[3]}{$style} /></object>\n\n"
    ."<!--\n"
    ."--=_NextPart_01C6A9B1.539AB070-->";

    return true;
}

У данного метода, по сравнению с обычными data URL есть масса ограничений: необходим специальный заголовок в начале файла, т.е. этот метод невозможно использовать на чужих сайтах, этим методом нельзя воспользоваться (по крайней мере не в таком виде) для включения ресурсов внутрь CSS или JavaScript.

Этот метод протестирован на Opera 9.25 и 9.50b, FF 2.0.0.13 и 4 (Minefield), Safari 3.1 (Safari под iPhone — тоже), Internet Explorer 6.0SP2 и 7.0, Sony PSP browser, Opera mini, Netscape Navigator 9.0.0.5.

Автор: Степанищев Евгений


.