GD Lib png портятся
imagepng($image, "file.png");
imagedestroy($image);
портятся мои пнг-шки. появляются какие-то абстрактные нарушения изображений.
портится именно та часть картинки, которая должна быть прозрачной
Цитата:
Originally posted by Cker
$image = imagecreatefrompng('../gallery/'.$row['filename']);
imagepng($image, "file.png");
imagedestroy($image);
портятся мои пнг-шки. появляются какие-то абстрактные нарушения изображений.
портится именно та часть картинки, которая должна быть прозрачной
$image = imagecreatefrompng('../gallery/'.$row['filename']);
imagepng($image, "file.png");
imagedestroy($image);
портятся мои пнг-шки. появляются какие-то абстрактные нарушения изображений.
портится именно та часть картинки, которая должна быть прозрачной
Скорее всего все дело в том, ни один браузер, включая IE (во всяком случае я такого не видел) не поддерживает 24-битную прозрачность в PNG. Именно по этой причине на месте прозрачных или полупрозрачных пикселей и участков можно наблюдать синии и розовые участки...
а вот после жд-либ такие непонятки
Код:
$imgname="pn24.png";
$im = @imagecreatefrompng($imgname);
if ($im) {
imagealphablending($im,true);
imagesavealpha($im,true);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
}
$im = @imagecreatefrompng($imgname);
if ($im) {
imagealphablending($im,true);
imagesavealpha($im,true);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
}
Для отображения прозрачности в IE5.5+ можно воспользоваться вот этим хаком http://groups.google.ru/groups?hl=ru&lr=&selm=1109828864%40p27.f830.n5020.z2.ftn&rnum=1
Только вот проблема вылезла с текстом на русском тексте. каракули выводит
Цитата:
Originally posted by Cker
Спасибо большое, помогло.
Только вот проблема вылезла с текстом на русском тексте. каракули выводит
Спасибо большое, помогло.
Только вот проблема вылезла с текстом на русском тексте. каракули выводит
Текст должен быть в кодировке UTF-8. Конвертировать можно с помощью iconv.
Код:
<?php
$im = imagecreate(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$text = "Это тест";
$text=iconv ("CP1251","UTF-8", $text);
$font = "times.ttf";
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
$im = imagecreate(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$text = "Это тест";
$text=iconv ("CP1251","UTF-8", $text);
$font = "times.ttf";
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
а можно еще как-то это картинку прелоадить. ну в том скрипте который ее вызывает. потому-что получается файл грузится с серым фоном, а потом фон становится прозрачным. некрасиво.
можно как-то сначала картинки запрелоадить, а потом отображать сразу, после того, как они уже сформируются с нормальной прозрачностью?
Код:
<html>
<head>
<style type="text/css">
body {
background-color: #ccc;
}
img.png { behavior: url("hack-png.htc");
border: none;
* display: none;
}
</style>
</head>
<body>
</body>
</html>
<head>
<style type="text/css">
body {
background-color: #ccc;
}
img.png { behavior: url("hack-png.htc");
border: none;
* display: none;
}
</style>
</head>
<body>
</body>
</html>
Это hack-png.htc:
Код:
<public:component>
<public:attach event="onpropertychange" for="element"
onEvent="propertyChanged()" />
<script language="JavaScript">
var needHack = needHack();
var transparentImage = "trans.gif";
pngHack();
element.style.display = 'inline-block';
function propertyChanged()
{
if (event.propertyName == "src")
pngHack();
}
function pngHack()
{
if (!needHack)
return;
var src = element.src;
if (src.indexOf(transparentImage) != -1)
return; // Already fixed
element.src = transparentImage;
element.runtimeStyle.filter =
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src +
"',sizingMethod='scale')";
}
function needHack()
{
if (window.opera) return false;
var pos = navigator.userAgent.indexOf("MSIE ");
if (pos == -1)
return false;
var version = navigator.userAgent.substring(pos + 5);
return (((version.indexOf("5.5") == 0) || (version.indexOf("6") == 0)) &&
(navigator.platform == ("Win32")));
}
</script>
</public:component>
<public:attach event="onpropertychange" for="element"
onEvent="propertyChanged()" />
<script language="JavaScript">
var needHack = needHack();
var transparentImage = "trans.gif";
pngHack();
element.style.display = 'inline-block';
function propertyChanged()
{
if (event.propertyName == "src")
pngHack();
}
function pngHack()
{
if (!needHack)
return;
var src = element.src;
if (src.indexOf(transparentImage) != -1)
return; // Already fixed
element.src = transparentImage;
element.runtimeStyle.filter =
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src +
"',sizingMethod='scale')";
}
function needHack()
{
if (window.opera) return false;
var pos = navigator.userAgent.indexOf("MSIE ");
if (pos == -1)
return false;
var version = navigator.userAgent.substring(pos + 5);
return (((version.indexOf("5.5") == 0) || (version.indexOf("6") == 0)) &&
(navigator.platform == ("Win32")));
}
</script>
</public:component>