GD-полупрозрачная картинка

Vin-Diesel

Новичок
GD-полупрозрачная картинка

требуется динамически обработать папку с картинками для дизайна пишу код(замену цвета удалил):
PHP:
<?php
$dir='./images/';
$dh=opendir($dir);
while($file=readdir($dh)) {
 if($file=='.'||$file=='..'||$file=='Thumbs.db') continue;

 $img=imagecreatefrompng($dir.$file);
 $img2=imagecreatetruecolor(imagesx($img),imagesy($img));

 imagealphablending($img,false); 
 imagesavealpha($img,true);

 $color=imagecolortransparent($img2);
 imagefill($img2,0,0,$color);

 for($x=0;$x<imagesx($img);$x++)
  for($y=0;$y<imagesy($img);$y++) {
   $rgb=imagecolorat($img,$x,$y);
   $r=($rgb>>16)&0xFF;
   $g=($rgb>>8)&0xFF;
   $b=$rgb&0xFF;

   $colors=imagecolorsforindex($img,$rgb);
   $color=imagecolorallocatealpha($img2,$r,$g,$b,$colors['alpha']);
   imagesetpixel($img2,$x,$y,$color);
 }
 imagepng($img2,$dir.$file);
}
?>
Исходная картинка:

Обработаная картинка:


Если не использовать $img2, тогда вообще получается картинка из розового цвета:(

Вопрос: В чем причина такой работы, вроде все верно?
 

Vin-Diesel

Новичок
Причем тут пропорции? Даже если я сделаю с ними получается черный прямоугольник, а остальные картинки(без полупрозрачных областей) становятся зелеными(до этого они были нормальные)

-~{}~ 01.08.09 20:00:

Замечательно! Сделал вывод данных о цветах, о каждом пикселе.
Red и Green каналы равны 0 в каждом пикселе, Blue разный..
Похоже что этот код:
PHP:
$r=($rgb>>16)&0xFF; 
$g=($rgb>>8)&0xFF; 
$b=$rgb&0xFF;
для картинок с прозрачностью не подходит.
Подскажите чем его заменить?

-~{}~ 01.08.09 20:19:

Хм страно:
PHP:
$rgb=$b
-~{}~ 01.08.09 20:35:

А все, курить мануал полезно:D
PHP:
 $rgba=imagecolorat($img,$x,$y);
 $rgba=imagecolorsforindex($img,$rgba);
			
  $color=imagecolorallocatealpha($img2,$rgba['red'],$rgba['green'],$rgba['blue'],$rgba['alpha']);
 imagesetpixel($img2,$x,$y,$color);
И вообще я гоню чет зачем мне лого картинки парсить:D однако курить траву не так полезно как мануал.
Проблема решена:) Топик можно закрыть
 
Сверху