PHP

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

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

Результат — готовый код на PHP из двух функций. Первую функцию («bolk_data_uri_header») нужно вызвать в самом начале перед выводом любого вашего кода, вторую («bolk_data_uri») собственно для включения картинки в код. Надеюсь, на примерах всё понятно:
<?php
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.
Добавлено: 23 Августа 2013 08:44:32 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...