ресайз прозрачной пнгшки
Есть пнгшка с альфаканалом, ее нужно ресайзить без потери прозрачности...
Делаю так:
Код:
$this->DstImage=ImageCreateTrueColor($distW, $distH);
if($this->OriginalType == "png"){
imagesavealpha($this->DstImage,TRUE);
}
ImageCopyResampled($this->DstImage, $this->SrcImage, 0, 0, 0, 0, $distW, $distH, $this->OriginalWidth, $this->OriginalHeight);
ImagePNG($this->DstImage, $path);
if($this->OriginalType == "png"){
imagesavealpha($this->DstImage,TRUE);
}
ImageCopyResampled($this->DstImage, $this->SrcImage, 0, 0, 0, 0, $distW, $distH, $this->OriginalWidth, $this->OriginalHeight);
ImagePNG($this->DstImage, $path);
Пробовал и так:
Код:
$this->DstImage=ImageCreateTrueColor($distW, $distH);
ImageCopyResampled($this->DstImage, $this->SrcImage, 0, 0, 0, 0, $distW, $distH, $this->OriginalWidth, $this->OriginalHeight);
if($this->OriginalType == "png"){
imagesavealpha($this->DstImage,TRUE);
}
ImagePNG($this->DstImage, $path);
ImageCopyResampled($this->DstImage, $this->SrcImage, 0, 0, 0, 0, $distW, $distH, $this->OriginalWidth, $this->OriginalHeight);
if($this->OriginalType == "png"){
imagesavealpha($this->DstImage,TRUE);
}
ImagePNG($this->DstImage, $path);
Но невыходит никак :(
Причем если не делать ресайз - все работает нормално...
Прозрачную png нельзя растягивать, дело в том, что осел, прозрачность понимает с использованием хаков (а другие браузеры png "кушают" нормально), так вот даже если ты заставишь осла понимать png, ты не сможешь сделать эту картинку больше и меньше по размеру, чем она создана в фотошопе. Вывести можно лишь реальный размер картинки.
Дело не в браузере! Я ее может даже и выводить не собираюсь... Мне нужно изменить реальные размеры пнгшки... Можно конечно перебрать ее попиксельно и сделать ее ресайз под нужный размер, но это слишком грузово получится...
Объясни, а зачем imagesavealpha()?
Это у тебя с моим кодом все получается?! :eek: :confused:
[QUOTE=mfender]Объясни, а зачем imagesavealpha()?[/QUOTE]
Эта функция включает альфаканал в изображении...
:) :) :)
Заработало!
Вот код, немного странный, но почемуто надо заливать фон прозрачным белым цветом...
Код:
<html>
<head>
<title>Sex with PNG</title>
</head>
<body bgcolor="#ff00ff">
<?php
$png=ImageCreateFromPNG("test.png");
$dst=ImageCreateTrueColor(150, 150);
imagesavealpha($dst, TRUE);
$cc=imagecolorallocatealpha($dst, 255, 255, 255, 127);
imagefill($dst, 0, 0, $cc);
imagecopyresampled($dst, $png, 0, 0, 0, 0, 150, 150, ImageSX($png), ImageSY($png));
ImagePNG($dst, "tt.png");
?>
<img src="test.png"/> <img src="tt.png"/>
</body>
</html>
<head>
<title>Sex with PNG</title>
</head>
<body bgcolor="#ff00ff">
<?php
$png=ImageCreateFromPNG("test.png");
$dst=ImageCreateTrueColor(150, 150);
imagesavealpha($dst, TRUE);
$cc=imagecolorallocatealpha($dst, 255, 255, 255, 127);
imagefill($dst, 0, 0, $cc);
imagecopyresampled($dst, $png, 0, 0, 0, 0, 150, 150, ImageSX($png), ImageSY($png));
ImagePNG($dst, "tt.png");
?>
<img src="test.png"/> <img src="tt.png"/>
</body>
</html>