Я думаю, проблема заключается в том, что вы можете использовать функцию, даже если параметр шаблона по умолчанию не компилируется, указав для него другое значение. Подумайте, что произойдет, если вы указали два параметра шаблона в вызове для добавления.
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 );
Я полагаю, что это должно добиться цели:
$srcImage = imagecreatefrompng($uploadTempFile);
imagealphablending($srcImage, false);
imagesavealpha($srcImage, true);
редактирование: Кто-то в требованиях документов PHP imagealphablending
должен быть верным, не ложным. YMMV.
Почему Вы делаете вещи так сложными? следующее - то, что я использую, и до сих пор оно сделало задание для меня.
$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]);
Переаттестация, которую прозрачность заповедника, тогда да любят указанный в других сообщениях imagesavealpha () должна иметь значение true, использовать альфа-флаг imagealphablending () еще должно иметь значение false, это не работает.
Также я определил две незначительных вещи в Вашем коде:
getimagesize()
для получения ширины/высоты для imagecopyresmapled()
$uploadWidth
, и $uploadHeight
должен быть -1
значение, так как координаты запускаются в 0
а не 1
, таким образом, это скопировало бы их в пустой пиксель. Замена его с: imagesx($targetImage) - 1
и imagesy($targetImage) - 1
, relativily должен сделать:) Я полагаю, это может помочь:
$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% зеленых пикселей. Во всяком случае, надеюсь, это поможет :)