Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

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

Этот метод протестирован на 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-2012 by KDG