Решаем проблему с полупрозрачностью PNG в Internet Explorer

Как известно, Internet Explorer младше 7-й версии не умеет отображать альфа-канал в файлах PNG. Существует несколько вариантов решений проблемы на клиентском коде, но на Symfony есть возможность соорудить серверную логику и подключать ее в каждом проекте.

На есть http://www.symfony-project.org/ готовый снипет, его и используем.

для начала вот такой код:
class pngAlphaFilter extends sfFilter
{
public function execute ($filterChain)
{
$filterChain->execute();
}

public function executeBeforeRendering ($filterChain)
{
$response = $this->getContext()->getResponse();

$content = $response->getContent();
$newContent = $this->replacePngTags($content, ‘/images/’);
$response->setContent($newContent);

$filterChain->execute();
}

/**
* KOIVI PNG Alpha IMG Tag Replacer for PHP (C) 2004 Justin Koivisto
* Version 2.0.12
* Last Modified: 12/30/2005
*
* Modifies IMG and INPUT tags for MSIE5+ browsers to ensure that PNG-24
* transparencies are displayed correctly. Replaces original SRC attribute
* with a binary transparent PNG file (spacer.png) that is located in the same
* directory as the orignal image, and adds the STYLE attribute needed to for
* the browser. (Matching is case-insensitive. However, the width attribute
* should come before height.
*
* Also replaces code for PNG images specified as backgrounds via:
* background-image: url(image.png); or background-image: url(‘image.png’);
* When using PNG images in the background, there is no need to use a spacer.png
* image. (Only supports inline CSS at this point.)
*
* @param string $x String containing the content to search and replace in.
* @param string $img_path The path to the directory with the spacer image relative to
* the DOCUMENT_ROOT. If none os supplied, the spacer.png image
* should be in the same directory as PNG-24 image.
* @param string $sizeMeth String containing the sizingMethod to be used in the
* Microsoft.AlphaImageLoader call. Possible values are:
* crop — Clips the image to fit the dimensions of the object.
* image — Enlarges or reduces the border of the object to fit
* the dimensions of the image.
* scale — Default. Stretches or shrinks the image to fill the borders
* of the object.
* @param bool $inScript Boolean flag indicating whether or not to replace IMG tags that
* appear within SCRIPT tags in the passed content. If used, may cause
* javascript parse errors when the IMG tags is defined in a javascript
* string. (Which is why the options was added.)
* @return string
*/
public function replacePngTags($x,$img_path=»,$sizeMeth=’scale’,$inScript=FALSE){
$arr2=array();
// make sure that we are only replacing for the Windows versions of Internet
// Explorer 5.5+
$msie=’/msie\s(5\.[5-9]|[6]\.[0-9]*).*(win)/i’;
if( !isset($_SERVER[‘HTTP_USER_AGENT’]) ||
!preg_match($msie,$_SERVER[‘HTTP_USER_AGENT’]) ||
preg_match(‘/opera/i’,$_SERVER[‘HTTP_USER_AGENT’]))
return $x;

if($inScript){
// first, I want to remove all scripts from the page…
$saved_scripts=array();
$placeholders=array();
preg_match_all(‘]*>(.*)isU’,$x,$scripts);
for($i=0;$i

Теги: , , ,

Вы можете оставить комментарий или подписаться на RSS feed

Коментарии

Бесполезный изврат

[…] http://symfony.org.ua/2008/07/poluprozrachnost-png-internet-explorer/ — способ заставить работать альфа-прозрачность в IE 6. […]

Офигенная статья, тот кто не шарит в php и png, тот не поймет всей важности данного материала.

Leave a comment

(обязательно)

(обязательно)