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

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

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

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

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

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


* 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){
// make sure that we are only replacing for the Windows versions of Internet
// Explorer 5.5+
if( !isset($_SERVER[‘HTTP_USER_AGENT’]) ||
!preg_match($msie,$_SERVER[‘HTTP_USER_AGENT’]) ||
return $x;

// first, I want to remove all scripts from the page…

Теги: , , ,

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


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

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

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

Leave a comment