Создание уменьшенной копии png файла с альфа каналом

runner

Новичок
Создание уменьшенной копии png файла с альфа каналом

Доброго времени суток.
Пытаюсь делать превьюшку на png файл с прозрачностью.
Вот кусок кода который непосредственно этим занимается.

PHP:
$source=imagecreatefrompng($img);
$target=imagecreatetruecolor($w, $h); 		
imagecopyresampled($target,$source,0,0,0,0,$w,$h,$size[0],$size[1]);
В результате получаю картинку на черном фоне.
Аналогичный код для jpg работает изумительно.

Подскажите каким образом у получаемой превьюшки сохранить прозрачность...

Спасибо.
 

runner

Новичок
Подскажите в сторону какой функции (-ий) копать и на каком этапе применить?

-~{}~ 24.10.09 19:06:

Спасибо... С проблемой разобрался...
Тему можно закрыть...
 

Breeze

goshogun
Команда форума
Партнер клуба
А написать решение проблемы для будущих поколений, которые через поиск найдут эту тему? :о)
 

runner

Новичок
По просьбе Breeze и для блага будущих поколений привожу код, который у меня получился.
Этот код предназначен для пропорционального изменения размеров исходного изображения в png файле с сохранением прозрачности.

PHP:
$img // Путь до исходного файла
$out // Путь до измененного файла
$w // Максимальная ширина превьюшки
$h // Максимальная высота превьюшки

$ratio=$w/$h; // Получаем соотношение сторон превьюшки
$size=getimagesize($img); // Пытаемся получить информацию о размере исходного файла
if ($size===false) die ('Некоректный файл');
$src_ratio=$size[0]/$size[1]; // Получаем соотношение сторон исходного файла

//Вычисляем размеры превьюшки
if ($ratio<$src_ratio){
$h=$w/$src_ratio;}
else{
$w=$h*$src_ratio;}

// Теперь занимаемся непосредственно созданием превьюшки
$source=imagecreatefrompng($img); 
$target=imagecreatetruecolor($w, $h);      
imagealphablending( $target, false );    
imagecopyresampled($target,$source,0,0,0,0,$w,$h,$size[0],$size[1]);
imagesavealpha( $target, true);

// Сохраняем результат работы в файл
$save=imagepng($target, $out) or die ('Не возможно сохранить файл');

// Убираем мусор
imagedestroy($target);
imagedestroy($source);
Код проверен. Предложения и пожелания принимаются... :)
 
Сверху