AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Вставка изображения в код с использованием 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.

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


.

© Copyright 2008-2017 by KDG