Файл PNG НЕ сохраняет прозрачность?

Я буду использовать эти переменные везде:

$ROOTDIR = $_SERVER["DOCUMENT_ROOT"];
$ROOTFILE = "http://www.scottandjessiecooper.com/webtutorials/images/smiley.png";
$NEWFILE = "$ROOTDIR/images/tmp/new_smiley.png";

Когда я использую эту функцию, у меня НЕТ проблем с прозрачностью

function save_image($root, $saveto){
    copy($root, $saveto);
}
save_image( $ROOTFILE, $NEWFILE ); // root can be file or url

Однако яНУЖН использовать IMAGE_RESOURCE так что я могу манипулировать ROOTFILE если нужн

Так что я попробую это:

if ( file_exists( $NEWFILE ) ) unlink ($NEWFILE);
$image = imagecreatefrompng( $ROOTFILE );
imagepng( $image, $NEWFILE );
imagedestroy( $image );

Теперь, когда я использую это:

<img src="<?=$NEWFILE?>" />

Я теряю прозрачность. Фон становится ЧЕРНЫМ!

Так что я попытался вывести изображение, чтобы убедиться, что это не Экономия это вызвало проблему:

if ( file_exists( $NEWFILE ) ) unlink ($NEWFILE);
$image = imagecreatefrompng( $ROOTFILE );
header('Content-Type: image/png');
imagepng( $image );
imagedestroy( $image );

Пока безрезультатно ...

Помогите

Ответы на вопрос(5)

$black = imagecolorallocate($im, 0, 0, 0); 
// Make the background transparent 
imagecolortransparent($im, $black);

(Прозрачность в PNG никогда не бывает идеальной для PHP)

 Robbie23 мая 2012 г., 13:35
Вы проверили функции imagemagick? Но если ответ Префельда дал вам ответ, используйте его (и поставьте ему галочку!)
 AlexMorley-Finch23 мая 2012 г., 13:19
Проблема в том, что он берет ВСЕ черное и делает его прозрачным. Я просто хочу, чтобы ОРИГИНАЛЬНАЯ прозрачность. Любые идеи
 AlexMorley-Finch23 мая 2012 г., 13:15
Вы говорите, что прозрачность в png не очень хороша в php, есть ли другой способ?

sотве @ правильная идея, но она не помогла мне решить эту проблему. Практический способ включить сохранение информации альфа-канала - позвонив Imagesavealpha на вашем ресурсе изображений перед выводом в файл:

imagesavealpha($image, true);
imagepng( $image, $NEWFILE );

Если вы этого не сделаете, по умолчанию GD удалит информацию о прозрачности при сохранении или выводе изображения. Причинаcopy не вызвал у вас этой проблемы то, что это простая побайтная копия на уровне файлов без какой-либо обработки изображения.

это помогает

$info = getimagesize("smiley.png");
$image = imagecreatefrompng("smiley.png");
$image_new = imagecreatetruecolor($info[0],$info[1]);       
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
  $trnprt_indx = imagecolortransparent($image);   
  if ($trnprt_indx >= 0 ) {   
     $trnprt_color    = imagecolorsforindex($image, $trnprt_indx);   
     $trnprt_indx    = imagecolorallocate($image_new, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);   
     imagefill($image_new, 0, 0, $trnprt_indx);   
     imagecolortransparent($image_new, $trnprt_indx);
  }
  elseif ($info[2] == IMAGETYPE_PNG) {
     imagealphablending($image_new, false);   
     $color = imagecolorallocatealpha($image_new, 0, 0, 0, 127);   
     imagefill($image_new, 0, 0, $color);   
     imagesavealpha($image_new, true);
   }
}
imagecopy($image_new,$image,0,0,0,0,$info[0],$info[1]);
imagepng($image_new,"smiley2.png");
Решение Вопроса
 AlexMorley-Finch23 мая 2012 г., 13:18
Я прочитал документацию по функции дляimagecreatefrompng и не нашел ничего полезного, мой плохой
 prehfeldt23 мая 2012 г., 13:16
Я только что искал "imagecreatefrompng прозрачность".
 user129951823 мая 2012 г., 13:25
i также сталкиваются с трудностями при сохранении изображений 8/16/24 PNG с прозрачностью и много раз использовали некоторые сценарии, создавая большие фрагменты php, пытаясь охватить каждый случай (истинный цвет или 256 и т. д.). Не все так просто.

GD илиPHP.

Проблема в фотошопе.

Если ты спасешьсяPNG файл, пока вы находитесь наRGB mode а не наIndexed mode.

 Hayden Thring27 апр. 2018 г., 01:30
это на самом деле исправило это для меня в gimp, в то время как никакой код не см

Ваш ответ на вопрос