Изменение размера изображений с прозрачностью в php

Я передумал, как правильно управлять альфой, когда я изменяю размер png. Мне удалось добиться прозрачности, но только для прозрачных пикселей. Вот мой код:

$src_image = imagecreatefrompng($file_dir.$this->file_name); $dst_image = imagecreatetruecolor($this->new_image_width, $this->new_image_height); imagealphablending($dst_image, true); imagesavealpha($dst_image, true); $black = imagecolorallocate($dst_image, 0, 0, 0); imagecolortransparent($dst_image, $black); imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $this->new_image_width, $this->new_image_height, $this->image_width, $this->image_height); imagepng($dst_image, $file_dir.$this->file_name); 

Начиная с этого исходного изображения:

введите описание изображения здесь

Измененное изображение выглядит следующим образом:

введите описание изображения здесь

Решение почти для каждого сообщения в форуме, о котором я рассказывал об этой проблеме, говорит, чтобы сделать что-то вроде этого:

 imagealphablending($dst_image, false); $transparent = imagecolorallocatealpha($dst_image, 0, 0, 0, 127); imagefill($dst_image, 0, 0, $transparent); 

Результаты этого кода не могут спасти любую альфу:

введите описание изображения здесь

Есть ли другое решение? Я что-то пропускаю с альфа-смешением? Почему это будет работать для всех остальных, но для меня совершенно не получается? Я использую MAMP 2.1.3 и PHP 5.3.15.

     "They have not worked at all and I'm not sure why." 

    Ну, ты, должно быть, делал что-то не так. Код из связанного дубликата с несколькими строками, добавленными для загрузки и сохранения изображения:

     $im = imagecreatefrompng(PATH_TO_ROOT."var/tmp/7Nsft.png"); $srcWidth = imagesx($im); $srcHeight = imagesy($im); $nWidth = intval($srcWidth / 4); $nHeight = intval($srcHeight /4); $newImg = imagecreatetruecolor($nWidth, $nHeight); imagealphablending($newImg, false); imagesavealpha($newImg,true); $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent); imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $srcWidth, $srcHeight); imagepng($newImg, PATH_TO_ROOT."var/tmp/newTest.png"); 

    Производит изображение:

    Измененный PNG с прозрачностью

    т.е. этот вопрос (и ответ) является полным дубликатом.

    Я использовал класс simpleImage для изменения размера изображения. Вы можете изменить размер изображения с сохранением пропорций. этот класс использует функции imagecreatetruecoror и imagecopyresampled core Php для изменения размера изображения

      $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; 

    найти полный код на http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/