Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1158842
png_replace.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Sep 18, 2:29 AM
Size
3 KB
Mime Type
text/x-php
Expires
Sat, Sep 20, 2:29 AM (2 m, 36 s)
Engine
blob
Format
Raw Data
Handle
746473
Attached To
rINP In-Portal
png_replace.php
View Options
<?php
/*
* replacePngTags - Justin Koivisto [W.A. Fisher Interactive] 7/1/2003 10:45AM
* Modified: 2/11/2004 10:18AM
*
* Modifies IMG tags for MSIE5+ browsers to ensure that PNG-24 transparencies
* are displayed correctly. Replaces original SRC attribute with a transparent
* GIF file (spacer.gif) 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'); When using PNG images in the background,
* there is no need to use a spacer.gif image.
*
* @param $x String containing the content to search and replace in.
* @result Returns the modified string.
*/
function
replacePngTags
(
$x
,
$spacer
=
"images/spacer.gif"
)
{
// make sure that we are only replacing for the Windows versions of Internet
// Explorer 5+, and not Opera identified as MSIE
$msie
=
'/msie
\s
([5-9])
\.
?[0-9]*.*(win)/i'
;
$opera
=
'/opera
\s
+[0-9]+/i'
;
if
(!
isset
(
$_SERVER
[
'HTTP_USER_AGENT'
])
||
!
preg_match
(
$msie
,
$_SERVER
[
'HTTP_USER_AGENT'
])
||
preg_match
(
$opera
,
$_SERVER
[
'HTTP_USER_AGENT'
]))
return
$x
;
// find all the png images in backgrounds
preg_match_all
(
'/background-image:
\s
*url
\(\'
(.*
\.
png)
\'\)
;/Uis'
,
$x
,
$background
);
for
(
$i
=
0
;
$i
<
count
(
$background
[
0
]);
$i
++){
// simply replace:
// "background-image: url('image.png');"
// with:
// "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
// enabled=true, sizingMethod=scale src='image.png');"
// haven't tested to see if background-repeat styles work...
$x
=
str_replace
(
$background
[
0
][
$i
],
'filter:progid:DXImageTransform.'
.
'Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale'
.
' src=
\'
'
.
$background
[
1
][
$i
].
'
\'
);'
,
$x
);
}
// OK, time to find all the IMG tags with ".png" in them
preg_match_all
(
'/(<img.*
\.
png.*>|<input.*type=([
\'
"])image
\\
2.*
\.
png.*>)/Uis'
,
$x
,
$images
);
while
(
list
(
$imgnum
,
$v
)=@
each
(
$images
[
0
])){
$original
=
$v
;
$atts
=
''
;
$width
=
0
;
$height
=
0
;
// If the size is defined by styles, find
preg_match_all
(
'/style=".*(width: ([0-9]+))px.*'
.
'(height: ([0-9]+))px.*"/Ui'
,
$v
,
$arr2
);
if
(
is_array
(
$arr2
)
&&
count
(
$arr2
[
0
])){
// size was defined by styles, get values
$width
=
$arr2
[
2
][
0
];
$height
=
$arr2
[
4
][
0
];
}
// size was not defined by styles, get values
preg_match_all
(
'/width=
\"
?([0-9]+)
\"
?/i'
,
$v
,
$arr2
);
if
(
is_array
(
$arr2
)
&&
count
(
$arr2
[
0
])){
$width
=
$arr2
[
1
][
0
];
}
preg_match_all
(
'/height=
\"
?([0-9]+)
\"
?/i'
,
$v
,
$arr2
);
if
(
is_array
(
$arr2
)
&&
count
(
$arr2
[
0
])){
$height
=
$arr2
[
1
][
0
];
}
preg_match_all
(
'/src=
\"
([^
\"
]+
\.
png)
\"
/i'
,
$v
,
$arr2
);
if
(
isset
(
$arr2
[
1
][
0
])
&&
!
empty
(
$arr2
[
1
][
0
]))
$image
=
$arr2
[
1
][
0
];
else
$image
=
NULL
;
// We do this so that we can put our spacer.gif image in the same
// directory as the image
$tmp
=
split
(
'[
\\
/]'
,
$image
);
array_pop
(
$tmp
);
$image_path
=
join
(
'/'
,
$tmp
);
if
(
strlen
(
$image_path
))
$image_path
.=
'/'
;
// end quote is already supplied by originial src attribute
$replace_src_with
=
$spacer
.
'" style="width: '
.
$width
.
'px; height: '
.
$height
.
'px; filter: progid:DXImageTransform.'
.
'Microsoft.AlphaImageLoader(src=
\'
'
.
$image
.
'
\'
, sizingMethod='
.
'
\'
scale
\'
)'
;
// now create the new tag from the old
$new_tag
=
str_replace
(
$image
,
$replace_src_with
,
$original
);
// now place the new tag into the content
$x
=
str_replace
(
$original
,
$new_tag
,
$x
);
}
return
$x
;
}
?>
Event Timeline
Log In to Comment