[ka-Map-users] PNG transparency not supported in internet explorer

Jacob Delfos jacob.delfos at maunsell.com
Thu Aug 4 10:38:25 EDT 2005


Hi Paul,

Thanks for that elaborate fix. Will give it a shot tomorrow. I might 
adapt it to make it resort to GIF compression instead. I like the 
advantages of 8bit lzw compression, and for this purpose it achieves the 
same. It may result in better performance on the client side as well, 
because there is no filter, and gif's are smaller in filesize.

regards,

Jacob

 

-----Original Message-----
From: Paul Spencer
To: Jacob Delfos
Cc: ka-map-users at lists.maptools.org
Sent: 8/4/2005 8:38 PM
Subject: Re: [ka-Map-users] PNG transparency not supported in internet 
explorer

Jacob,

I would caution against the indiscriminate use of this hack as I ran
into problems with it being applied to 8bit pngs.

I ultimately got it working for my purposes by setting a class on each
image I wanted the hack applied to (pngHack) and modifying the behaviour

so that it checked the className of the image before applying the hack.

One way to work around this is for you to have a modified createImage
function in kaMap.js that adds the necessary style tag to the images as
they are created.  Then you wouldn't need the css/htc file.  This could
even be done conditionally on the current browser.

If you want to pursue the imagetype per group option (perhaps as well?)
then I would suggest using metadata on the layers.  You would have to
modify init.php to check for the metadata and pass it to the _layer
constructor.  You would have to modify _layer in kaMap.js.  You would
have to modify setTile in kaMap.js to append the additional parameters
to the tile URL for each image.  And you would have to modify tile.php
to check for additional parameters coming from $_GET and take
appropriate action.

It is not actually necessary to modify kaMap in this case, though ...
you can create your own _layer subclass in a separate js file:

function _png24Layer(szName,bVisible,opacity)
{
     _layer.apply( this, [szName,bVisible,opacity] );
     this.setTile = _png24Layer_setTile;
}

function _png24Layer_setTile(img)
{
     //copy from _layer_setTile
     var szForce = '';
     var szLayers = '';
     if (arguments[1])
         szForce = '&force=true';
     var szGroup = "&g="+img.layer.domObj.id;
     var szScale = '&s='+this._map.aScales[this._map.currentScale];
     var l = safeParseInt(img.style.left) + this._map.kaMap.xOrigin;
     var t = safeParseInt(img.style.top) + this._map.kaMap.yOrigin;
     var src = this._map.kaMap.server+
               this._map.kaMap.tileURL+
               '?map='+this._map.name+
               '&t='+t+
               '&l='+l+
               szScale+szForce+szGroup;

     //pass desired format to source
     src = src + "&format=png24";

     if (isIE4)
     {
         //apply png24 hack for IE
         img.style.visibility = 'hidden';
         img.src = this._map.kaMap.aPixel.src;
         img.style.filter =
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"',
sizingMethod='scale')";
     }
     else
     {

         if (img.src != src)
         {
             img.style.visibility = 'hidden';
             img.src = this._map.kaMap.server+
                   this._map.kaMap.tileURL+
                   '?map='+this._map.name+
                   '&t='+t+
                   '&l='+l+
                   szScale+szForce+szGroup;
         }
     }
}

then in init.php, you create a _png24Layer instead of a _layer.  You
then modify tile.php to detect format in the $_GET to switch the format
before rendering the tile.

If you can get this to work, I would actually be interested in putting
this all into the kaMap core by making format a property of the _layer
object.

Cheers

Paul

Jacob Delfos wrote:
 > Emil,
 >  
 > Thanks for that info. I wasn't aware of it. You'd have thought
Microsoft
 > would have fixed that up a while ago.
 >  
 > I guess I'll have to use gif to get transparency. Would be good if the

 > imagetype could be different for each layer, to be able to keep 24bit
 > colour. I might look into doing that. Worked well for me in Chameleon.
 >  
 > regards,
 >  
 > Jacob
 >  
 >  
 >  
 >
------------------------------------------------------------------------
--------
 > From: Emil Zegers [mailto:taatuut at planet.nl]
 > Sent: 4 August 2005 14:26
 > To: Delfos, Jacob; ka-map-users at lists.maptools.org
 > <mailto:ka-map-users at lists.maptools.org>
 > Subject: RE: [ka-Map-users] PNG transparency not supported in internet

 > explorer
 >  
 >
 > Hello Jacob,
 >  
 > At the moment IE 5.5+ does not properly support PNG transparancy (IE7
 > beta does, see
http://blogs.msdn.com/ie/archive/2005/07/29/445242.aspx)
 >  
 > However, there are some hacks to provide PNG transparancy for 24/32
bit
 > PNG's in IE 5.5+, some are listed at
 > http://blogs.msdn.com/ie/archive/2005/04/26/412263.aspx.
 >  
 > A good one is the hack at webfx
 > http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html
 >  
 > Of course do not forget to question yourself if using hacks for this
is
 > what you want. On the other hand if you want to support PNG
transparancy
 > for IE this is a nice solution.
 >  
 > Regards,
 >  
 > Emil
 > -----Original Message-----
 > From: ka-map-users-bounces at lists.maptools.org
 > <mailto:ka-map-users-bounces at lists.maptools.org>
 > [mailto:ka-map-users-bounces at lists.maptools.org]On Behalf Of Delfos,
Jacob
 > Sent: donderdag 4 augustus 2005 4:32
 > To: ka-map-users at lists.maptools.org
<mailto:ka-map-users at lists.maptools.org>
 > Subject: [ka-Map-users] PNG transparency not supported in internet
explorer
 >  
 >
 > Hi all,
 >  
 > Just figured out why Internet Explorer keeps coming up with a blank
map,
 > but not sure how to fix it. It would appear that Internet Explorer
does
 > not support the PNG transparency that mapserver outputs. So my
 > transparent vector layers come out perfectly white where there's no
 > data. Firefox does support it, though. In the screenshot you can see a

 > normal tile and a transparent tile next to one another. The tile comes

 > out transparent in firefox, but not in internet explorer. Has anyone
 > else had this? And.... anything I can do about it?
 >  
 > Not sure of this is in Bugzilla. Seems bugzilla for Ka-Map is
down......
 >  
 > Regards,
 >  
 > Jacob
 >  
 >  
 >  
 > <<kamap.jpg>>
 >  
 > JACOB DELFOS
 > SPATIAL INFORMATION ANALYST
 > Maunsell Australia Pty Ltd
 > 629 Newcastle Street, Leederville, WA 6007
 > PO Box 81, Leederville, WA 6902
 > Western Australia
 > ABN 20 093 846 925
 >  
 > Tel     + 61 8 9281 6185
 > Fax    + 61 8 9281 6297
 > jacob.delfos at maunsell.com <mailto:jacob.delfos at maunsell.com>
 >
 >
 >
------------------------------------------------------------------------
 >
 > _______________________________________________
 > ka-Map-users mailing list
 > ka-Map-users at lists.maptools.org
 > http://lists.maptools.org/mailman/listinfo/ka-map-users

-- 
+-----------------------------------------------------------------+
|Paul Spencer                           pspencer at dmsolutions.ca   |
+-----------------------------------------------------------------+
|Applications & Software Development                              |
|DM Solutions Group Inc                 http://www.dmsolutions.ca/|
+-----------------------------------------------------------------+


More information about the ka-Map-users mailing list