Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GD Lib png портятся

254
23 мая 2005 года
Cker
341 / / 20.08.2000
$image = imagecreatefrompng('../gallery/'.$row['filename']);
imagepng($image, "file.png");
imagedestroy($image);


портятся мои пнг-шки. появляются какие-то абстрактные нарушения изображений.
портится именно та часть картинки, которая должна быть прозрачной
1.9K
23 мая 2005 года
zorkk
80 / / 22.07.2004
Цитата:
Originally posted by Cker
$image = imagecreatefrompng('../gallery/'.$row['filename']);
imagepng($image, "file.png");
imagedestroy($image);


портятся мои пнг-шки. появляются какие-то абстрактные нарушения изображений.
портится именно та часть картинки, которая должна быть прозрачной




Скорее всего все дело в том, ни один браузер, включая IE (во всяком случае я такого не видел) не поддерживает 24-битную прозрачность в PNG. Именно по этой причине на месте прозрачных или полупрозрачных пикселей и участков можно наблюдать синии и розовые участки...

254
23 мая 2005 года
Cker
341 / / 20.08.2000
а почему оригинальные файлы отображаюся нормально?
а вот после жд-либ такие непонятки
832
23 мая 2005 года
Carpus
390 / / 14.04.2005
Для того, чтобы отображалась прозрачность в png24 необходимо включить альфаканал и установить флаг его сохранения:

Код:
$imgname="pn24.png";
$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
254
25 мая 2005 года
Cker
341 / / 20.08.2000
Спасибо большое, помогло.
Только вот проблема вылезла с текстом на русском тексте. каракули выводит
832
25 мая 2005 года
Carpus
390 / / 14.04.2005
Цитата:
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);
?>
254
25 мая 2005 года
Cker
341 / / 20.08.2000
ага, ок, спасибо.

а можно еще как-то это картинку прелоадить. ну в том скрипте который ее вызывает. потому-что получается файл грузится с серым фоном, а потом фон становится прозрачным. некрасиво.
можно как-то сначала картинки запрелоадить, а потом отображать сразу, после того, как они уже сформируются с нормальной прозрачностью?
832
25 мая 2005 года
Carpus
390 / / 14.04.2005
Можно в стиле прописать * display: none;, тогда IE не будет отображать картинку, а в htc после фильтра изменить свойство display на inline-block;

Код:
<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"
&#111;&#110;Event="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>
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог