使用“-ms-filter”属性时如何保持 PNG alpha 透明度

Posted

技术标签:

【中文标题】使用“-ms-filter”属性时如何保持 PNG alpha 透明度【英文标题】:How to maintain PNG alpha transparency when using "-ms-filter" property 【发布时间】:2010-11-03 13:09:30 【问题描述】:

我有以下 html

<a><img src="myfile.png" /> Some text</a>

还有这个css:

a:hover

    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
    opacity: .75;

IE 8 和 IE 7 都会出现此问题。

当PNG图像受制于-ms-filterfilter时,它的alpha透明度被破坏了。试试看,你会看到。这是 IE 8 和 IE 7 中的一个错误。

我可以删除 CSS 中应用的“-ms-opacity”和“filter”属性吗?这个的语法是什么? (例如像 -ms-filter: "";

有人知道解决这个问题的方法吗?

【问题讨论】:

我认为我们没有理解您的问题。你可以试试改写吗? @SpliFF 等。 - 有人可以添加(或编辑)一个答案,以提供在 IE 7 和 8 中以 75% 的不透明度制作具有部分透明显示的 png 所需的 css。这是原始问题,没有完整的答案。 【参考方案1】:

只是修饰 SpliFF 的答案,我可以通过将以下 jQuery 添加到我的页面来解决这个问题:

$(function() 
    if (jQuery.browser.msie)
        $('img[src$=".png"]').each(function()  // must have quotes around .png
            this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+this.src+",sizingMethod='scale')";
        );
);

这将应用 AlphaImageLoader 页面中的所有 PNG。

【讨论】:

这个小脚本(以及我想褪色的图像周围的一些跨度标签)对于那些不得不与 MSIE 可憎的东西搏斗的人来说是一个奇迹和宝藏。【参考方案2】:

更新:AlphaImageLoader 过滤器直接应用于 img 可能会覆盖 Alpha 过滤器。至于删除过滤器你试过filter:none;吗?

是的,使用条件 cmets 以编程方式针对 IE6 及更低版本。

<!--[if lt IE 7]>
<style>a:hoverfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);</style>
<![endif]-->

此外,IE7-js 之类的脚本将为您处理 PNG 透明度,而不会用非标准代码弄乱您的 CSS。

<!--[if lt IE 7]>
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
<![endif]-->

【讨论】:

对不起,我对 IE 6 不感兴趣 - 我试图在使用“-ms-filter”或“filter”css 属性时使其在 IE7 和 IE8 中工作。 该解决方案也适用于 ie7。只需将条件更改为 lt IE8 并将脚本更改为 ie8.js 但问题甚至出现在 IE 8 中:当您在 CSS 中应用 'filter' 或 '-ms-filter' 属性时,任何 PNG alpha 透明度都不再起作用。 啊..好吧,我误解了这个问题。也许尝试将 AlphaImageLoader 过滤器直接应用于图像,看看它是否会覆盖 A 上的 Alpha 过滤器。 好吧,我还需要删除样式覆盖中的过滤器(想想 .loading 或 .active css 类),filter:none 不起作用:(【参考方案3】:

对于寻找其他答案的人,我使用以下代码解决了这个问题,我自己用纯 JavaScript 编写,因此它是独立于框架的。您仍然必须将它放在框架的 DOM 就绪事件中(或者您可以像我一样使用 domready.js)。它使用 AlphaImageLoader 加载所有带有 .PNG 扩展名的图像。必须在应用 Alpha 过滤器之前完成(您也可以在此代码之后使用 JS 应用过滤器)。

以下代码:

var i;
for (i in document.images) 
    if (document.images[i].src) 
        var imgSrc = document.images[i].src;
        if (imgSrc.toLowerCase().substr(imgSrc.length-4) === '.png') 
            document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src='" + imgSrc + "')";
        
    

记得把它放在 IE 的条件 cmets 中:

<!--[if IE]><![endif]-->

请让我知道它是否工作正常。 亲切的问候!

【讨论】:

以上是关于使用“-ms-filter”属性时如何保持 PNG alpha 透明度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pygame 在 Python 中保持 png 图像的透明度? [复制]

保存时使用 Python PIL“质量”参数时,PNG 文件大小是不是应该保持静态?

如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?

回形针 - 将 SVG 转换为 PNG 时保持透明度

IE png黑边框修复

从插画家导出图像时保持原始尺寸[关闭]