Прозрачность изображения PNG может быть сохранена при использовании GDlib PHP imagecopyresampled?

Я думаю, проблема заключается в том, что вы можете использовать функцию, даже если параметр шаблона по умолчанию не компилируется, указав для него другое значение. Подумайте, что произойдет, если вы указали два параметра шаблона в вызове для добавления.

97
задан George 4 April 2013 в 15:34
поделиться

5 ответов

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

сделал это для меня. Спасибо ceejayoz.

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

Редактирование: полный заменяющий код. См. также ответы ниже и их комментарии. Это, как гарантируют, не будет быть прекрасным всегда, но действительно достигало моих потребностей в то время.

$uploadTempFile = $myField[ 'tmp_name' ]
list( $uploadWidth, $uploadHeight, $uploadType ) 
  = getimagesize( $uploadTempFile );

$srcImage = imagecreatefrompng( $uploadTempFile ); 

$targetImage = imagecreatetruecolor( 128, 128 );   
imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );

imagecopyresampled( $targetImage, $srcImage, 
                    0, 0, 
                    0, 0, 
                    128, 128, 
                    $uploadWidth, $uploadHeight );

imagepng(  $targetImage, 'out.png', 9 );
192
ответ дан Brooks 24 November 2019 в 05:22
поделиться

Я полагаю, что это должно добиться цели:

$srcImage = imagecreatefrompng($uploadTempFile);
imagealphablending($srcImage, false);
imagesavealpha($srcImage, true);

редактирование: Кто-то в требованиях документов PHP imagealphablending должен быть верным, не ложным. YMMV.

10
ответ дан ceejayoz 24 November 2019 в 05:22
поделиться

Почему Вы делаете вещи так сложными? следующее - то, что я использую, и до сих пор оно сделало задание для меня.

$im = ImageCreateFromPNG($source);
$new_im = imagecreatetruecolor($new_size[0],$new_size[1]);
imagecolortransparent($new_im, imagecolorallocate($new_im, 0, 0, 0));
imagecopyresampled($new_im,$im,0,0,0,0,$new_size[0],$new_size[1],$size[0],$size[1]);
21
ответ дан 24 November 2019 в 05:22
поделиться

Переаттестация, которую прозрачность заповедника, тогда да любят указанный в других сообщениях imagesavealpha () должна иметь значение true, использовать альфа-флаг imagealphablending () еще должно иметь значение false, это не работает.

Также я определил две незначительных вещи в Вашем коде:

  1. Вы не должны звонить getimagesize() для получения ширины/высоты для imagecopyresmapled()
  2. $uploadWidth, и $uploadHeight должен быть -1 значение, так как координаты запускаются в 0 а не 1, таким образом, это скопировало бы их в пустой пиксель. Замена его с: imagesx($targetImage) - 1 и imagesy($targetImage) - 1, relativily должен сделать:)
2
ответ дан gmadd 24 November 2019 в 05:22
поделиться

Я полагаю, это может помочь:

$uploadTempFile = $myField[ 'tmp_name' ]
list( $uploadWidth, $uploadHeight, $uploadType ) 
  = getimagesize( $uploadTempFile );

$srcImage = imagecreatefrompng( $uploadTempFile );

$targetImage = imagecreatetruecolor( 128, 128 );

$transparent = imagecolorallocate($targetImage,0,255,0);
imagecolortransparent($targetImage,$transparent);
imagefilledrectangle($targetImage,0,0,127,127,$transparent);

imagecopyresampled( $targetImage, $srcImage, 
                    0, 0, 
                    0, 0, 
                    128, 128, 
                    $uploadWidth, $uploadHeight );

imagepng(  $targetImage, 'out.png', 9 );

Обратной стороной является то, что изображение будет удалено из каждых 100% зеленых пикселей. Во всяком случае, надеюсь, это поможет :)

4
ответ дан 24 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: